我一直在寻找如何正确比较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的新手,所以任何有关如何让这些字符正确比较的建议或提示都将非常感激。感谢。
答案 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] != '-') {
...