为什么我的if / else语句不起作用?

时间:2018-07-25 15:44:34

标签: c user-input

我开始为小型银行帐户程序编写代码,但是我的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';
    } 
}

1 个答案:

答案 0 :(得分:5)

%c的{​​{1}}格式说明符接受任何单个字符,包括空格或换行符。

例如,如果用户输入“ 1”,那么他们实际上是在发送字符“ 1” 。在循环的第一次迭代中读取“ 1”字符,换行符保留在输入缓冲区中。在下一次迭代中,scanf立即读取缓冲区中的换行符。并且由于换行符的字符代码与您的任何scanf大小写都不匹配,因此它会落入if

更改else调用以添加前导空格。那会消耗任何空格:

scanf