簡體   English   中英

在 C 中使用 fgets 作為輸入

[英]Using fgets for input in C

我正在嘗試在函數中使用 fgets 來獲取 C 中的輸入。我的代碼顯示正確,但是它沒有遵循我的 do/while 循環參數(如果我輸入了超出范圍的數字,它會繼續執行程序,而不是重復循環直到輸入正確)。 我試過修補它,但我無法弄清楚我的問題是什么。 我認為這可能與將輸入作為字符而不是整數有關。 但是我嘗試將我的入口變量轉換為 int,但這沒有幫助。 非常感謝任何幫助!

{
 char  line[MAX_LINE];

 int   entry;

    do
    {
     printf("Please enter %s(%d-%d) ", descriptionCPtr, low, high);
     fgets(line, MAX_LINE, stdin);
     entry = (int)line[0];
    }

    while(entry < low || entry > high);
    return(entry);
}

你的直覺是正確的。 您沒有正確地將用戶輸入轉換為數值。 fgets讀取用戶輸入並將其(連同\\n )存儲到line變量中; 字符數組。 讓我們假設用戶是一個輸入他年齡99老人,所以line將是一個包含99\\n\\0字符的數組。 但是,在下一行中,您將line[0]將字符9 (ASCII 碼為 57)轉換為整數,並將 57 分配給entry 好吧,這可能不是您打算在這里實現的目標。

對於這種情況,我推薦的解決方案是使用scanf而不是fgets

int age;

scanf("%d", &age);
if (age < min_age || age > max_age)
    printf("age not valid\n");

如果你想堅持使用 fgets,你可以刪除換行符並用調用函數替換轉換,比如atoi (順便說一下,這不是真的安全)以將line轉換為整數。

暫無
暫無

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

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