2015-10-17 140 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 */ 
     } 
} 

我希望這會幫助你。