案例1:
printf("Enter the operation you want to carry out (+, -, /, *): ");
scanf("%c", &operator);
printf("Enter two numbers: ");
scanf("%lf %lf", &num_1, &num_2);
在这种情况下,程序运行顺利。
案例2:
printf("Enter two numbers: ");
scanf("%lf %lf", &num_1, &num_2);
printf("Enter the operation you want to carry out (+, -, /, *): ");
scanf("%c", &operator);
在这种情况下,输入数字后,它将直接执行程序的其余部分,并显示默认错误消息。
因为,根据[手册页](http://man7.org/linux/man-pages/man3/scanf.3.html):
大多数转换会丢弃初始的空白字符(下面会说明例外情况)
其中一个例外是%c
。
您在终端中按“输入”时输入的换行符是一个字符。当程序正在等待%lf
时,它只是将其丢弃,但是对于%c
,它将用作接受的输入。