【发布时间】:2019-05-23 14:35:11
【问题描述】:
我需要确定用户输入是否为数字。我需要遍历每个字符并检查是否都是数字,如果不是 printf() 错误消息,否则成功。我使用 for 循环遍历每个字符,并使用带有 isdigit() 函数的 if 语句来检查数字。但我的问题是我正在为每个字符打印。例如,如果我输入22A,我会收到2 和2 的2 条成功消息,然后我会收到A 的错误消息。但我只需要打印错误消息,因为22A 不完全是数字。
int n = strlen(argv[1]);
for (int i=0; i<n; i++){
if (isdigit((int)argv[1][i]) == 0){
printf("Error\n");
return 1;
}
else{
printf("Success\n");
printf("%i\n", atoi(argv[1]));
}
}
【问题讨论】:
-
您在循环中打印“成功”,所以它仍然只是部分成功。
-
@bruno: (a)
atol不会确定字符串是否为数字。它接受一个初始数字部分并且不提供是否是整个字符串的指示。 (b) 即使这样做了,它也不能满足规定的要求:“我需要遍历每个……”目标不仅仅是将字符串转换为数字,而是执行一个练习,可能是在一个类中OP是学生。调用库例程无法教授如何使用所教授的控制结构。 -
@EricPostpischil 我想说strtol,我不是第一次犯这个该死的错误
-
在检查完字符串中的所有个字符之前,您不想打印“Success”,这意味着您希望在之后 i> 循环结束。
-
当您说 numeric 时,您是否将其限制为仅数字,或者您是否允许使用前缀
-、小数分隔符,甚至可能是千位分隔符?然后还有科学记数法需要担心。请澄清一下,然后就可以回答了。