我正在编写一个小程序,接受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
如果出现文件结尾或找到换行符,解析将停止,在这种情况下,str将包含该换行符。
因此,在将字符串馈送到isNumeric之前,需要修剪尾随的eol字符。

关于c - 为什么isNumeric函数不能与fgets一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57769486/

10-11 23:08