0

我在编程方面有点菜鸟,特别是在 C 语言方面。我正在尝试一些代码来了解有关 C 语法的更多信息。这是我的问题:为什么getchar()下面代码段中的第二个不起作用?我的意思是我想安慰等到我进入然后完成。

#include<stdio.h>
#include<curses.h>

int main() {
    char ch = getchar(); 
    getchar();

    return 0;
}

PS:我使用的是 ubuntu 17.10。

4

1 回答 1

1

如评论中所述,您正在输入两个字符。字母a和换行符 ( \n)。显示第二个 getchar() 接受\n

如果你想使用第二个 getchar() 那么在使用它之前使用fflush(stdin). fflush(stdin) 通常会删除(刷新)这种类型的额外字符(在您的情况下\n)。或者您可以执行以下操作

#include<stdio.h>
#include<curses.h>

int main() {
    char ch;
    printf("Enter a charcter: ");
    ch = getchar(); 
    printf("\nyou typed the character ");
    putchar(ch);
    while ((getchar()) != '\n');     //fflush(stdin);   /* use this*/
    getchar();

    return 0;
}

这里“while ((getchar()) != '\n');” 读取缓冲区字符直到结束并丢弃它们(包括换行符)并在“scanf()”语句清除输入缓冲区并允许在所需容器中输入之后使用它。

还可以查看以下链接。

  1. 替换 fflush(stdin)
  2. 替代 C 库函数 fflush(stdin)
  3. 使用 fflush(stdin)
  4. 在 C/C++ 中清除输入缓冲区
于 2018-03-01T08:42:16.473 回答