我开始为一个小型银行账户程序编写代码,但我的if/else语句不起作用。在循环的顶部,我使用scanf
来获得关于下一步需要执行哪个选项的用户输入。第一个总是有效的,但在那之后,错误语句总是被打印出来。
例如,用户键入1
。打印的是:
case 1
ERROR, please try again
只有情况1应该打印,为什么错误消息也要打印?我尝试使用switch case
语句,但也不起作用。
这是我的代码:
char num = '7';
while (1) {
if(num == '7') {
printf("0. Exitn1. Depositn2. Withdrawaln3. Add accountn");
printf("4. Remove accountn5. Balance inquiryn6. View accountsn");
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 1n");
num = '7';
}
else if (num == '2') {
printf("case 2n");
num = '7';
}
else if (num == '3') {
printf("case 3n");
num = '7';
}
else if (num == '4') {
printf("case 4n");
num = '7';
}
else if (num == '5') {
printf("case 5n");
num = '7';
}
else if (num == '6') {
printf("case 6n");
num = '7';
}
else {
printf("ERROR, please try againn");
num = '7';
}
}
scanf
的%c
格式说明符接受任何单个字符,包括空格或换行符。
例如,如果用户输入"1",他们实际上是在发送字符"1">和换行符。循环的第一次迭代读取"1"字符,换行符保留在输入缓冲区中。在下一次迭代中,scanf
立即读取缓冲区中的换行符。由于换行符的字符代码与if
的任何一种情况都不匹配,所以它会一直延续到else
。
更改scanf
调用以添加前导空格。这将消耗任何空白:
scanf(" %c", &num);