我一直不擅长用 C 语言输入字符,这是另一个例子。虽然我了解(也许)发生了什么,但我无法找出解决方案。
我有以下代码
scanf("%ld %ld",&n,&m);
for(i=0;i<n;i++)
scanf("%ld",&array[i]);
for(i=0;i<m;i++)
{
fflush(stdin);
//inputting a character 'R' but it is picking '\n' from past buffer
scanf("%c",&query);
//As a result of above problem, it is also acting wierd for same reason
scanf("%ld",&d);
printf("%c %ld",query,d);
printf("\nI=%ld\n",i);
}
请帮我弄清楚发生这种情况的原因以及解决方案。
最佳答案
将 scanf
与 %d
(或 %ld
)一起使用仅从输入流中提取数字;它在流中留下换行符。
因此,当您编写 scanf("%c"
时,它会读取该换行符。
要解决此问题(如果您的意图是 scanf("%c"
读取下一行的第一个字符),您需要刷新上一行的输入。一种方法即:
int ch; while ( (ch == getchar()) != EOF && ch != '\n' ) { }
您的行 fflush(stdin);
会导致未定义的行为 - 不要那样做。 fflush
函数仅用于输出流。
此外,检查 scanf
的返回值也是一个非常好的主意。如果这不是您所期望的,那么您可能希望采取一些行动,而不是假装输入了一个数字。
关于c - 在c中的一行中输入字符和整数从过去的输入流中读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709939/