C语言使用逻辑运算符比较多个字符串无法正常工作如何解决?
问题核心原因
你代码的问题出在两个地方:
strcmp返回值判断错误
C语言标准规定,strcmp函数只有在两个字符串完全相等时返回0;如果第一个字符串字典序大于第二个返回正整数,小于则返回负整数,返回的正/负数值不一定是1/-1,你写的strcmp(...) == 1的判断逻辑本身就不成立。- 判断逻辑和运算符使用错误
你要实现的效果是「输入和三个指定字符串都不相等时输出错误提示」,对应的逻辑运算符应该是逻辑与&&,而不是你用的逻辑或||。
其他可优化点
scanf("%s", &game);写法不规范:字符数组名本身就是数组首地址,不需要额外取地址,直接写scanf("%s", game);即可。
修正后可正常运行的代码
#include <stdio.h> #include <string.h> #include <ctype.h> int main() { char game[40]; printf("Enter one among rock, paper and scissor: "); scanf("%s", game); for (int i = 0; game[i]; i++) { game[i] = tolower(game[i]); } // 三个都不匹配时才触发错误提示 if (strcmp(game, "rock") != 0 && strcmp(game, "paper") != 0 && strcmp(game, "scissor") != 0) { printf("It is a wrong input\n"); } else { /* 匹配成功,执行后续逻辑 */ } return 0; }
内容的提问来源于stack exchange,提问作者Adrija Roy
相关产品推荐
相关产品推荐

