簡體   English   中英

為什么isNumeric函數不能與fgets一起使用?

[英]Why doesn't this isNumeric function work with fgets?

我正在編寫一個小程序,接受來自stdin並檢查它是否包含數字。 問題在於它僅適用於scanf()而不適用於fgets (我想避免使用scanf )。

為此,我使用了<ctype.h> isDigit函數和以下用於檢查數組每個字符的函數:

int isNumeric(const char *buf) {
 for(size_t i = 0; i < strlen(buf); i++)
   if(isDigit(buf[i]) == 0)
     return false;
  return true;
}

這是驅動程序代碼:

// This does not works
int main(void) {
 char c[256];

 fgets(c, sizeof(c), stdin);

 if(isNumeric(c))
   puts("Is numeric");
 else
   puts("Not numeric");
}
// ####################
// This works
int main(void) {
 char c[256];

 scanf("%s", c);

 if(isNumeric(c))
   puts("Is numeric");
 else
   puts("Not numeric");
}

顯然,預期輸出應為“是數字”。 我用fgets做錯了什么?

fgets

如果出現文件結尾或找到換行符,則分析停止,在這種情況下, str將包含該換行符

因此,在將字符串提供給isNumeric之前,您需要修剪結尾的eol字符。

暫無
暫無

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

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