c - 在c中的一行中输入字符和整数从过去的输入流中读取字符

标签 c input scanf

我一直不擅长用 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/

相关文章:

c控制台程序

c - localtime() 在 C 中给出了错误的日期

javascript - 将输入字段设置为标签元素的当前值

c - Fscanf 读取 c 中 float 和字符的混合

c - 在循环中使用 fscanf() 的问题

c - 一项任务要求我用 2 个 scanf 收集一个名字

c - Rank 测试的空分布

c - glib 内存分配 VS std *alloc 和 free

asp.net-mvc-3 - .NET MVC 3 提交按钮做不同的事情

c++ - cin.get 在一个 while 循环中