首页 > 解决方案 > 为什么这个 isNumeric 函数不能与 fgets 一起使用?

问题描述

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

为此,我使用了isDigit函数 from<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什么?

标签: cc-strings

解决方案


fgets

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

因此,在将字符串提供给您之前,isNumeric您需要修剪尾随的 eol 字符。


推荐阅读