[英]Using scanf() inside a while loop but the loop does not terminate
我正在用C編寫一個程序,希望用戶僅在輸入兩個整數時才運行循環。 我在用
while(scanf(" %d %d" ,&a ,&b) == 2)
但是,如果我輸入更多或更少的輸入,程序不會終止。 如果我輸入一個輸入,程序將等待下一行的第二個輸入。 如果我輸入了三個輸入,則程序將使用前兩個整數,而第三個將等待后續輸入。
我認為使用getchar()
可能會有所幫助,但我不知道如何。
我究竟做錯了什么?
我應該如何終止程序?
我應該如何終止程序?
那就是應該如何表現的。
為了獲得預期的輸出,您可以使用類似
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.