我正在编写一个小程序,接受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/