scanf在c语言中的奇怪行为

时间:2018-10-31 20:02:22

标签: c scanf

int main(){
    int firstNumber, secondNumber, thirdNumber;
    char oper;

    scanf("%d", &firstNumber);
    printf("%d\n", firstNumber);

    scanf("%c", &oper);
    printf("%c\n", oper);

    scanf("%d", &secondNumber);
    printf("%d\n", secondNumber);


    return 0;
}

为什么此代码无法正常工作,它读取了第一个和第二个数字,但是操作符却有些奇怪。

1 个答案:

答案 0 :(得分:0)

很难使用scanf()。在这里,您在第一个数字之后按Enter键后,stdin上还有一个换行符。所以,这就是你读的字符。某些格式转换会忽略空格,但%c不会。

要使其忽略前导空格,应改为使用

scanf(" %c", &oper);

格式字符串中的空格告诉scanf()忽略它找到的任何空格,因此您将读取一个非空格字符。