簡體   English   中英

檢查用戶輸入是否是 C 中的 integer

[英]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之類的內容從緩沖區中讀取該行,例如使用sscanfstrtol對其進行解析,如果失敗,請詢問新的輸入。

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.

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