为什么isNumeric函数不能与fgets一起使用?

时间:2019-09-03 10:08:08

标签: c c-strings

我正在写一个小程序,接受来自stdin的输入,并检查它是否包含数字。问题在于它仅适用于scanf()而不适用于fgets(我想避免使用scanf)。

为此,我使用isDigit中的<ctype.h>函数和以下用于检查数组每个字符的函数:

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我在做什么错了?

1 个答案:

答案 0 :(得分:3)

fgets

  

如果发生文件结尾或找到换行符,则分析停止,在这种情况下, str将包含该换行符

因此,在将字符串输入isNumeric之前,您需要修剪结尾的eol字符。