有一些strcmp()的问题 - 代码编译,但似乎没有工作

时间:2016-07-12 16:20:12

标签: c string character strcmp

我试图让用户给我一个运营商(+, - ,/,*)。为了确保他/她这样做,我写了这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main(void)
{
char operator;

printf("Enter operator: (+, -, *, /) \n");

do { scanf("%c", &operator); }
while ((strcmp(&operator, "+") != 0) || (strcmp(&operator, "-") != 0) || (strcmp(&operator, "*") != 0) || (strcmp(&operator, "/") != 0));
}

最终发生的事情是循环继续,即使我输入正确的运算符。任何帮助表示赞赏。谢谢:))

编辑:(固定代码)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main(void)
{
char operator;

printf("Enter operator: (+, -, *, /) \n");

    do { scanf(" %c", &operator); }
 while ((strcmp(&operator, "+") != 0) && (strcmp(&operator, "-") != 0) && (strcmp(&operator, "*") != 0) && (strcmp(&operator, "/") != 0));

}

2 个答案:

答案 0 :(得分:3)

函数strcmp采用以零结尾的字符串,而不是字符。出于这个原因,使用

strcmp(&operator, "+")

导致未定义的行为。

您的代码可以像

一样简单
while ((operator != '+') && ...) 

注意我也将||更改为&&

您还需要"%c"之前的空格" %c",这样如果输入循环重复,它会清除输入缓冲区中留下的任何newline

编辑:你似乎没有做出正确的修正,我建议

do {
    scanf(" %c", &operator);
} while (operator != '+' && operator != '-' && operator != '*' && operator != '/');

答案 1 :(得分:0)

以下列方式声明变量运算符

char operator[2] = { '\0' };

并像

一样使用它
do { scanf("%c ", operator); }
while ((strcmp( operator, "+") != 0) && (strcmp(operator, "-") != 0) && (strcmp(operator, "*") != 0) && (strcmp(operator, "/") != 0));
}

考虑到您可以使用一个函数strcmp而不是使用多个strchr而不是FileReader