当使用switch语句在C中创建一个简单的计算器时,为什么我们必须在输入数字之前指定运算符



案例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);

在这种情况下,在我输入数字后,它直接执行程序的其余部分,并打印出默认的错误消息。

因为,根据手册页:

大多数转换都会丢弃初始空白字符(以下注意到例外情况(

其中一个例外是%c

当您在终端中点击"回车"时,您输入的换行符是一个字符。当程序正在等待%lf时,它只是丢弃它,但对于%c,它被用作接受的输入。

理想情况下,你根本不需要点击"回车",但默认情况下,许多(大多数?(终端都是行缓冲的,所以在你这样做之前,不会向你的程序发送任何信息。为了获得更灵活的UI,请使用curses或适当的图形界面。

相关内容

最新更新