我想制作一个简单的布尔计算器,它使用OR,AND,NAND和XOR。这就是它必须做的事情:
如果用户随时输入以q
开头的字符串(如quit
),程序应立即退出。如果用户随时输入以c
开头的字符串(如cancel
),则程序应中止当前计算并再次请求第一个参数。如果用户输入0
以外的任何内容,1
或以c
或q
开头的字符串,则应显示错误(请参阅下文)并要求同样的价值。
现在,我知道这可能非常愚蠢,但我现在开始编程...
我输入的内容并不重要,它只会重新选择"您选择退出!" 为什么它会忽略"开关?
#include <stdio.h>
#include <stdlib.h>
int main() {
// Declaration Part
char user_input[100];
//Main Body
gets(user_input);
while (user_input[0] == !'q') {
switch (user_input[0]) {
case '0':
case '1':
printf("You chose boolean algebra! \n");
break;
case 'c':
printf("%s\n", "You chose to continue!");
continue;
}
}
printf("You chose to quit! \n");
return 0;
}
答案 0 :(得分:0)
您的代码中存在两个主要问题:
条件while (user_input[0] == !'q')
应写为while (user_input[0] != 'q')
绝不应使用过时的函数gets()
。请改用fgets()
。
你没有在while
循环中读取新行...条件是常量,你有一个无限循环(如果你直接输入)或者你永远不会输入。
这是一个更好的版本:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
// Declaration Part
char input[100];
//Main Body
while (fgets(input, sizeof input, stdin) != NULL && input[0] != 'q') {
switch (input[0]) {
case '0':
case '1':
printf("You chose boolean algebra! \n");
break;
case 'c':
printf("%s\n", "You chose to continue!");
continue;
}
}
printf("You chose to quit!\n");
return 0;
}
答案 1 :(得分:0)
运算符!
是布尔值,如果操作数非零,则结果为false
,在条件表达式中隐式转换为零:
user_input[0] == !'q'
您只是将user_input[0]
与零进行比较,因此永远不会输入切换。也就是说它不是没有做你想要的开关 - 它是if(...)
中不正确的布尔表达式。
您需要的是二元运算符 !=
user_input[0] != 'q'
答案 2 :(得分:0)
为什么“忽略”开关?
它不是执行开关,因为它位于条件从不为真的条件块内。你正在解决代码的错误部分;为什么它不执行切换应该是显而易见的,你应该问的问题是“为什么while
条件永远不会是真的?”。
运算符!
是布尔值,如果操作数非零,则结果为false
,与整数相比,它隐式地转换为零。在你的条件表达式中:
user_input[0] == !'q'
您只是将user_input[0]
与零进行比较,因此循环体永远不会输入。所以它不是没有做你想要的开关 - 它是while(...)
中不正确的布尔表达式。
您需要的是二元运算符 !=
user_input[0] != 'q'