将数组中的char元素与运算符进行比较

时间:2012-02-06 22:52:29

标签: c arrays char compare argv

我一直在寻找如何正确比较char数组中的char元素,但它对我不起作用。我试图将char数组中的第一个char与运算符(检查是否存在+或 - )进行比较。

编辑:看到我的错误。 if语句中的逻辑错误。谢谢大家的快速回复。

起初我试过这个:

    main(int argc, char *argv[]){

    int i;
    int len;
    char input[10];

    for(i = 1; i < 8; i++){

        len = strlen(argv[i]);
        strcpy(input,argv[i]);

        //debug purposes
        printf("%c\n",input[0]);

        if(input[0] != '+' || input[0] != '-')  {
            printf("incorrect number format. %s has no sign.\nnow terminating.\n", input);
        }// end if
    }//end for
}//end main

然后我读了一些帖子,看到我应该使用strcompare比较字符,所以我尝试了这个:if( !strcmp(input[0],'+') || !strcmp(input[0],'-') )

然而,他们似乎仍然没有正确比较。我使用上面的代码得到了分段错误,并且使用我之前的代码,它将打印运算符,但仍然会进入if语句,说明格式不正确。我仍然是C的新手,所以任何有关如何让这些字符正确比较的建议或提示都将非常感激。感谢。

3 个答案:

答案 0 :(得分:4)

原始if条件中的逻辑不正确:

if(input[0] != '+' || input[0] != '-')

总是如此:如果'+'== input[0]条件等同于false || true,反之亦然'-' == input[0]

应该是:

if(input[0] != '+' && input[0] != '-')

答案 1 :(得分:2)

您将字符串strcmp进行比较(这就是字面意思:str =“字符串”,cmp =比较),而不是字符。原始代码块中的比较很好。

混淆可能是由于您使用了char数组。在C中,字符串(很大程度上)等同于char数组,因此如果使用char数组作为字符串,那么strcmp 是合适的。但是,你没有这样做:你只是将它作为一个字符数组使用,所以你原来的比较很好。

如果操作员不是+ 而非-,则您要输入if块。您正在使用or。请尝试以下方法:

if(input[0] != '+' && input[0] != '-')  {
    printf("incorrect number format. %s has no sign.\nnow terminating.\n", input);
}

答案 2 :(得分:2)

直接比较单个字符(例如input[0] != '-')。 strcmp和朋友用于比较字符串。

但你的情况总是如此。你想要

if(input[0] != '+' && input[0] != '-')  {
    ...