[英]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
將是一個包含9
、 9
、 \\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.