c - 简单的C scanf 不起作用?

标签 c console scanf

如果我尝试以下操作:

int anint;
char achar;

printf("\nEnter any integer:");
scanf("%d", &anint);
printf("\nEnter any character:");
scanf("%c", &achar);
printf("\nHello\n");
printf("\nThe integer entered is %d\n", anint);
printf("\nThe char entered is %c\n", achar);

它允许输入一个整数,然后跳过第二个 scanf完全地,这真的很奇怪,因为当我交换两者时(首先是char scanf),它工作正常。到底出了什么问题?

最佳答案

使用scanf读取输入时,按回车键后会读取输入,但回车键生成的换行符不会被scanf消耗掉,这意味着下次您从标准输入读取 char 时,将会有一个换行符可供读取。

避免的一种方法是使用 fgets 将输入读取为字符串,然后使用 sscanf 提取所需内容,如下所示:

char line[MAX];

printf("\nEnter any integer:");
if( fgets(line,MAX,stdin) && sscanf(line,"%d", &anint)!=1 ) 
   anint=0;

printf("\nEnter any character:");
if( fgets(line,MAX,stdin) && sscanf(line,"%c", &achar)!=1 ) 
   achar=0;

使用换行符的另一种方法是 scanf("%c%*c",&anint);%*c 将从缓冲区中读取换行符并丢弃它。

您可能想阅读以下内容:

C FAQ : Why does everyone say not to use scanf?

关于c - 简单的C scanf 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36570999/

相关文章:

c - 轮询返回 POLLIN 和 POLLERR 后的 Read()

c# - 从单元测试中获取发送到 Console.Out 的输出?

c - 如何使用 fscanf 忽略逗号从文件中获取输入?

c - gets() 没有按预期工作

c - 在 c 中的多行 printf 后,程序以段错误(核心转储)结束?

c - Atmel 微处理器和旋转编码器控制 7 段显示器的速度

c - C的头文件中的函数体在哪里

java - 将 Object[]arrayInteger 转换为 int[] arrayInt

c++ - 文件输出8192个字符后停止

c - before 的期望表达式(C 编程语言)