簡體   English   中英

在while循環中使用scanf()但循環不會終止

[英]Using scanf() inside a while loop but the loop does not terminate

我正在用C編寫一個程序,希望用戶僅在輸入兩個整數時才運行循環。 我在用

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

但是,如果我輸入更多或更少的輸入,程序不會終止。 如果我輸入一個輸入,程序將等待下一行的第二個輸入。 如果我輸入了三個輸入,則程序將使用前兩個整數,而第三個將等待后續輸入。

我認為使用getchar()可能會有所幫助,但我不知道如何。

我究竟做錯了什么?

我應該如何終止程序?

我應該如何終止程序?

  1. 您可以通過輸入無效的輸入(例如字母)來終止它。
  2. 您可以通過在控制台上輸入表示EOF的組合鍵來終止它-如果您使用的是Linux,請按Ctrl + D。

那就是應該如何表現的。

為了獲得預期的輸出,您可以使用類似

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只讀取前兩個整數。 因此,它返回兩個,並且循環不會終止。 如果要正確檢查此問題,請使用以下示例進行檢查。

例:-

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

我希望這能幫到您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM