C:非常重视一个参数是一个int参数

问题描述 投票:0回答:9

在我的程序中,我需要验证传递给程序的参数是否为整数,因此我创建了这个小函数来处理用户键入“ 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;
 }
}

我希望一切都清楚,谢谢您的帮助;)

c function
9个回答
11
投票

如果要检查字符是否为十位数字之一,则需要使用字符常量'0''1'等(不是整数常量,01等)。 。


8
投票

一旦解决了已经指出的问题,您可能应该查找isdigitisspace,并使用它们来更清晰地编写函数。另一种可能性是使用strcspnstrpbrk之类的内容一步完成搜索。


5
投票

只需使用strtol,它将转换整数,您可以从第三个参数中判断它是否成功。

有关说明,请参见strtol(3)


1
投票

[首先,我很惊讶您的代码使用名为long的变量而无法编译。但是,真正的问题是您使用的是数字0-9,而不是交换机中的字符'0''9'


1
投票

除了其他答案,请考虑改用isdigit。也可以考虑重命名函数以反映其实际功能(例如intsAndSpacesOnly


1
投票

您可以将isdigitisspace功能用作:

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是不能用作标识符的关键字。


1
投票

如果您使用ctype.h,特别是isdigit或],可以简化您的工作,缩短代码的时间>

if(toCheck[i] >= '0' && toCheck[i] <= '9' || toCheck[i] == ' '){

1
投票

我假设您的意思是一个正整数,因为如果传入负数,代码将失败,如果传入指数也类似(例如,将1000表示为1e3)。后者可能很少需要您担心,但是前者可能是您需要考虑的问题-我不知道您要验证的目的是什么,而只是一个警告:-)


1
投票

您可能想在break;语句之后添加i++;语句。否则,您将始终通过default分支“下降”并返回0。

© www.soinside.com 2019 - 2024. All rights reserved.