在while循环中使用scanf(),但循环不终止

  • 本文关键字:循环 终止 scanf while
  • 更新时间 :
  • 英文 :


我正在用C写一个程序,其中我希望循环只在用户输入两个整数时运行。我正在使用

while(scanf(" %d %d" ,&a ,&b) == 2)

但是如果我输入更多或更少的输入,程序不会终止。如果我输入了一个输入,程序将等待下一行的第二个输入。如果我输入三个输入,程序接受前两个整数,第三个整数等待后续输入。

我认为使用getchar()可能有帮助,但我不知道如何。

我做错了什么?

如何终止程序?

如何终止程序?

  1. 您可以通过输入无效的输入(例如字母)来终止li。
  2. 你可以通过在控制台上输入一个组合键来终止它,这意味着EOF - Ctrl+D如果你使用的是Linux。

这就是它应该的行为。

要获得预期的输出,您可以使用类似

的内容
int a, b;
char c;
for(;;) /* Infinite loop */
{
  if(scanf("%d%c%d", &a, &c, &b) == 3 && c == ' ' && getchar() == 'n')
    break; /* Break out of the loop */
  fputs("Invalid input; Try again", stderr);
  if(c != 'n')
    while((c = getchar()) != 'n' && c != EOF); /* Clear the `stdin` */
}

scanf返回在stdin中读取的字符数。它工作正常。如果输入单个整数,则scanf将等待第二个整数参数。您正在输入两个以上的整数,但是您的scanf只读取前两个整数。它返回2,循环不会终止。如果你想正确地检查这一点,使用下面的例子来检查。

: -

#include<stdio.h>
int main()
{
        int x;
        int y;
        int i;
        while((scanf("%d %d",&x, &y) == 2) && (i = getchar()) == 'n')
        {
                /* do your operations what you want */
        }
}

最新更新