如何在C

时间:2017-05-23 23:13:17

标签: c for-loop if-statement

以下代码(编译正常)检查命令行输入中的非字母字符,但我觉得必须有更好的方法来编写它。例如,您可以看到没有代码在核心if if语句中执行,该语句检查字符串中的每个字符。有没有办法检查其中一个字符是否为字母字符并抛出错误,而不是在else函数中出错?

int main(int argc, string argv[]){

    // terminate program if more than one key
    if(argc != 2){

        printf("error");
        return 1;

    // check to ensure key characters are alphabetical
    } else {
        for(int h = 0; h < strlen(argv[1]); h++){
            if(isalpha(argv[1][h])){

            } else {
                printf("error");
                return 1;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

是的,您可以反转if条件,这是这些情况下的一般解决方案。

int main(int argc, string argv[]){

    // terminate program if more than one key
    if(argc != 2){

        printf("error");
        return 1;

    } else {
        // check to ensure key characters are alphabetical
        for(int h = 0; h < strlen(argv[1]); h++){
            if(!isalpha(argv[1][h])){
                printf("error");
                return 1;
            }
        }
    }
}

答案 1 :(得分:1)

字符串通常很短,但调用strlen()ina for循环条件是一个坏习惯。它是O(N平方),因为每次迭代都扫描整个字符串。

像这样编写函数

int allalpha(const char *str)
{
   size_t i;
   for(i=0;str[i];i++)
     if(!isalpha(str[i]))
        return 0;
   return 1;
}

然后在主

if(!allalpha(argv[1]))
{
   /* non all-alpha error handling code here */
}