我试图让用户给我一个运营商(+, - ,/,*)。为了确保他/她这样做,我写了这段代码:
#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));
}
答案 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