我开始为小型银行帐户程序编写代码,但是我的if / else语句不起作用。在循环的顶部,我使用scanf
来获取用户输入有关下一步需要执行哪个选项的信息。第一个始终有效,但此后,总是打印错误语句。
例如,用户键入1
。打印出来的是:
case 1
ERROR, please try again
仅应打印情况1,为什么还要打印错误消息?我尝试使用switch case
语句,但这也不起作用。
这是我的代码:
char num = '7';
while (1) {
if(num == '7') {
printf("0. Exit\n1. Deposit\n2. Withdrawal\n3. Add account\n");
printf("4. Remove account\n5. Balance inquiry\n6. View accounts\n");
printf("Enter option: (0/1/2/3/4/5/6)\n");
scanf("%c", &num);
}
else if (num == '0') {
exit(0);
}
else if (num == '1') {
printf("case 1\n");
num = '7';
}
else if (num == '2') {
printf("case 2\n");
num = '7';
}
else if (num == '3') {
printf("case 3\n");
num = '7';
}
else if (num == '4') {
printf("case 4\n");
num = '7';
}
else if (num == '5') {
printf("case 5\n");
num = '7';
}
else if (num == '6') {
printf("case 6\n");
num = '7';
}
else {
printf("ERROR, please try again\n");
num = '7';
}
}
答案 0 :(得分:5)
%c
的{{1}}格式说明符接受任何单个字符,包括空格或换行符。
例如,如果用户输入“ 1”,那么他们实际上是在发送字符“ 1” 和。在循环的第一次迭代中读取“ 1”字符,换行符保留在输入缓冲区中。在下一次迭代中,scanf
立即读取缓冲区中的换行符。并且由于换行符的字符代码与您的任何scanf
大小写都不匹配,因此它会落入if
。
更改else
调用以添加前导空格。那会消耗任何空格:
scanf