[英]check whether user input is an integer in C
我在之前的討論中讀到
#include <stdio.h>
int main ()
{
int num;
printf("\nPlease enter an integer:\n");
scanf("%d",&num);
// Let us check whether the user input is in integer //
while ((num = getchar()) != '\n' && num != EOF)
{
printf("\n\nError in input\n");
printf("Please enter valid integer\n");
scanf("%d",&num);
}
}
將檢查輸入是否為 integer。 該代碼有效。 但我不明白什么
while ((num = getchar()) != '\n' && num != EOF)
是在做。 任何人都可以幫忙嗎?
scanf("%d",&num);
將解析標准輸入緩沖區中存在的stdin
如果確實可解析,則不可解析的字符將保留在緩沖區中。
此代碼中的技巧是在scanf
之后檢查緩沖區中存在的字符是否為換行符( \n
),如果是,則該值已正確解析,在這種情況下,請求新輸入的循環將不會執行,如果沒有,未解析的字符仍將在緩沖區中,將由getchar
讀取,這將驗證它確實不是\n
,並且將執行循環。
這樣做的問題是,如果您輸入諸如"aadd"
之類的內容,則循環將執行 4 次,即輸入緩沖區中剩余的字符數。
盡管它或多或少有效,但它不是最好的方法,如評論中所述,最好使用fgets
之類的內容從緩沖區中讀取該行,例如使用sscanf
或strtol
對其進行解析,如果失敗,請詢問新的輸入。
while ((num = getchar()) != '\n' && num != EOF)
只是一種不必要的混淆寫作方式:
num = getchar();
while((num != '\n') && (num != EOF)) // inner parenthesis not necessary, just for readability
{
...
num = getchar();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.