C:验证参数是否为int参数

时间:2010-11-01 17:11:12

标签: c function

在我的程序中,我需要验证传递给程序的参数是否为整数,所以我创建了这个小函数来处理用户键入“1st”而不是“1”的情况。

问题是它根本不起作用。我尝试调试,我可以告诉你的是参数是12,长是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;
 }
}

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

9 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:7)

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:1)

首先,我很惊讶您的代码通过名为long的变量进行编译。但是,您的真正问题是您使用的是数字0-9,而不是切换中的字符'0''9'

答案 4 :(得分:1)

您可能希望在break;语句后添加i++;语句。否则,您将始终“落入”default分支并返回0。

答案 5 :(得分:1)

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

答案 6 :(得分: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;
}

是一个不能用作标识符的关键字。

答案 7 :(得分:1)

如果您使用ctype.h,特别是isdigit或

,您可以让您的生活更轻松,代码更短
if(toCheck[i] >= '0' && toCheck[i] <= '9' || toCheck[i] == ' '){

答案 8 :(得分:1)

我假设你的意思是一个正整数,因为如果传入负数,你的代码将会失败,类似地,如果传入指数(例如,1000为1e3)。后者可能很少见,你需要担心,但前者可能需要考虑 - 我不知道你的目的是什么目的,但只是单挑: - )