【问题标题】:Using getchar(); to define multiple variables [duplicate]使用 getchar();定义多个变量
【发布时间】:2018-07-29 05:09:26
【问题描述】:

我有以下代码。

#include <stdio.h>
int main () {
    char letter1;
    char letter2;

    printf("Enter Letter 1: ");
    letter1 = getchar();
    printf("\n");

    printf("Enter Letter 2: ");
    letter2 = getchar();
    printf("\n");

    printf("%c - %c\n", letter1, letter2);
    return(0);
}

我正在尝试使用getchar() 来定义letter1letter2,但是它只适用于letter1,然后将letter2 的值设置为'\n'。有谁知道解决这个问题的方法,所以我可以为这两个变量键入值?

【问题讨论】:

  • 您输入的是 letter1,然后是返回键,代码显示 letter1,然后是代表返回键的换行符?在这种情况下,程序完全按照您告诉它做的事情。您是否考虑过忽略除已接受的信件之外的任何内容? IE。只需忽略换行符并使用另一个 getch() 来查找所需的第二个非空格。
  • @Yunnosch 你的意思是getchar() 而不是getch(),对吧?
  • 不是问题,但letter1letter2 应该是int 类型,因为getchar 返回int
  • @CoolGuy 当然,懒惰打字和缺乏双重检查......感谢您的关注。

标签: c char getchar


【解决方案1】:

这是因为当您按下第一个字母并键入 Enter 键时,您会将字母的代码和 '\n' 一个接一个地发送到输入缓冲区,从那里将被使用。

因此,第一个 getchar() 获取您键入的字母的代码,因此该字母从输入缓冲区中删除,但 \n 的字母仍然存在,由下一个 getchar() 使用。

为了避免这种情况,您需要从输入缓冲区继续消费,直到 '\n' 被消费。

一种方法是

int c;
while( (c=getchar())=='\n' && c!=EOF);

只要读取的字符是 \n 并且未达到 EOF,它将继续从输入缓冲区中消耗。 getchar() 会在出错时返回 EOF

int letter1, letter2;
int c;
printf("Enter Letter 1: ");
letter1 = getchar();
printf("\n");
printf("Enter Letter 2: ");
while( (c=getchar())=='\n' && c!=EOF);
letter2=c;
printf("\n");
printf("%c - %c\n", letter1, letter2);

编辑:正如 cmets 中所指出的,请注意 getchar() 返回 int 而不是 char。请参阅this 帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多