这可能是一个简单的问题,但我搜索了很多,仍然没有想出来.我用gcc编译下面的剪辑代码并从终端运行程序.在正确的情况下,它允许输入int和char,但它不允许.它不等待进入char?
这里的任何人都可以帮助我.提前致谢!
#include <stdio.h>
int main()
{
char c;
int i;
// a
printf("i: ");
fflush(stdin); scanf("%d", &i);
// b
printf("c: ");
fflush(stdin); scanf("%c", &c);
return 0;
Run Code Online (Sandbox Code Playgroud)
}
%d将读取连续数字,直到遇到非数字.%c读一个字符.可能发生的事情是你给它一个数字(几位数)后跟一个新行.%c然后读入新行.您可能打算fflush(stdin);放弃任何尚未阅读的内容,但不幸的是,这是未定义的行为.
解决方案是在读取字符之前丢弃所有空格:
scanf(" %c", &c);
Run Code Online (Sandbox Code Playgroud)
注意开始时的空间.这意味着丢弃所有空格.
您可以使用getchar()来实现您想要的。
或使用以下方法消耗额外的换行符:-
scanf(" %c", &c);
^^^ <------------Note the space
Run Code Online (Sandbox Code Playgroud)
原因:- 您的下一个用于读取字符的 scanf 只是读取/使用换行符,因此从不等待用户输入
| 归档时间: |
|
| 查看次数: |
12108 次 |
| 最近记录: |