2015-10-17 389 views
1

我正在用C语言编写一个程序,其中我希望只有当用户输入两个整数时循环才能运行。我正在使用在while循环中使用scanf(),但循环不终止

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

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

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

我在做什么错了?

我应该如何终止程序?

回答

0

我应该如何终止程序?

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

这就是它应该如何表现。

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

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` */ 
} 
0

scanf函数返回多少个字符的标准输入读取。它工作正常。 如果输入一个整数,那么scanf将等待第二个整数参数。您输入了两个以上的整数,但您的scanf只读取前两个整数。所以,它返回两个,你的循环不会被终止。 如果你想使用下面的例子来检查它是否正确。

例子: -

#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 */ 
     } 
} 

我希望这会帮助你。