案例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或适当的图形界面。