在我的程序中,我需要验证传递给程序的参数是否为整数,因此我创建了这个小函数来处理用户键入“ 1st”而不是“ 1”的情况。
问题是它根本不起作用。我尝试调试,我只能告诉您参数是12,而long是2。(12是我要测试的值,2是传递给函数的数字的数量)
int intOnly(char *toCheck, int longeur) {
int i = 0;
while (i < longeur) {
switch (toCheck[i]) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case ' ':
i++;
default:
return 0;
break;
}
return 1;
}
}
我希望一切都清楚,谢谢您的帮助;)
如果要检查字符是否为十位数字之一,则需要使用字符常量'0'
,'1'
等(不是整数常量,0
,1
等)。 。
一旦解决了已经指出的问题,您可能应该查找isdigit
和isspace
,并使用它们来更清晰地编写函数。另一种可能性是使用strcspn
或strpbrk
之类的内容一步完成搜索。
只需使用strtol
,它将转换整数,您可以从第三个参数中判断它是否成功。
有关说明,请参见strtol(3)
[首先,我很惊讶您的代码使用名为long的变量而无法编译。但是,真正的问题是您使用的是数字0-9,而不是交换机中的字符'0'
至'9'
。
除了其他答案,请考虑改用isdigit
。也可以考虑重命名函数以反映其实际功能(例如intsAndSpacesOnly
)
您可以将isdigit
和isspace
功能用作:
int intOnly(char *toCheck, int len) { // long is reserved word..use len.
int i = 0;
while (i < len) {
if(!isdigit(toCheck[i]) && !isspace(toCheck[i]))
return 0;
i++;
}
return 1;
}
也long是不能用作标识符的关键字。
如果您使用ctype.h,特别是isdigit或],可以简化您的工作,缩短代码的时间>
if(toCheck[i] >= '0' && toCheck[i] <= '9' || toCheck[i] == ' '){
我假设您的意思是一个正整数,因为如果传入负数,代码将失败,如果传入指数也类似(例如,将1000表示为1e3)。后者可能很少需要您担心,但是前者可能是您需要考虑的问题-我不知道您要验证的目的是什么,而只是一个警告:-)
您可能想在break;
语句之后添加i++;
语句。否则,您将始终通过default
分支“下降”并返回0。