//Checks if it's an integer, other wise halt the program
void checkInt(char s[]){
int i;
boolean boo = TRUE;
fgets(s, sizeof(s), stdin);
for (i = 0; i < strlen(s); ++i){
printf("%d",isdigit(s[i]));
if (!(isdigit(s[i]))){
boo = FALSE;
printf("Invalid input!\n");
printf("CLOSING PROGRAM");
exit(1);
}
printf("Cool");
}
}
int main()
{
int userInput;
scanf("%d", &userInput);
char buf[sizeof(int)*3+2];
snprintf(buf, sizeof buf, "%d", userInput);
checkInt(buf);
return 0;
}
我现在已经玩了一段时间了,我似乎不明白为什么我的isDigit总是在我传递数字时返回0?我尝试使用在线Iodeone.com,它按预期工作,但当我使用编译我的老师希望我们使用的,数字突然不知道他们是数字
答案 0 :(得分:2)
您的代码有些问题:
您初始化缓冲区以传递给checkInt()
,但在checkInt()
内,您可以通过调用fgets()
来覆盖缓冲区中的内容。
s
中的变量checkInt()
实际上是一个指针,而不是一个数组,因此sizeof(s)
并不能为您提供所需的大小;
覆盖传递到fgets()
的数据的checkInt()
可能只是通过stdin
调用读取scanf()
流中剩下的换行符 - 所以缓冲区基本上设置为等同于"\n"
的字符串。这就是isdigit()
来电永远不会看到数字的原因。