|
10鱼币
- #include <stdio.h>
- int main()
- {
- float num = 0;
- double sum = 0;
- int status;
- do
- {
- printf("请输入合法的数字:");
- do
- {
- sum = sum + num;
- status = scanf("%f", &num);
- } while (getchar() != '\n' );
- } while(status == 1);
- printf("结果是:%.2lf\n", sum);
- return 0;
- }
复制代码
就是说我输入"A"然后按回车 他就会一直啥都不显示也不结束循环然后还可以继续输入。按理来说前面scanf接收了"A"以后,后面的回车也就是"\n"应该被getchar接收呀。然后循环终止,status也是0所以就可以直接打印出结果才对。
本帖最后由 LuLD 于 2021-4-1 13:12 编辑
status = scanf("%f", &num);
因为输入的是 字符 A ,所以赋值失败,字符A还是保存在 缓存区的,所以 getchar() 得到的是 字符 A
我用变量接收了一下 getchar(),发现是之前输入的字符 A,循环条件成立
你在 status = scanf("%f", &num); 之后 加个语句
char temp_a = getchar();
printf("%c",temp_a);
就可以发现 temp_a 的值是 输入的字符 A,然后就可以正常退出循环了
怪得很,可能理解的还不是很透彻,我一直认为是赋值不成功就丢弃了的。
|
最佳答案
查看完整内容
status = scanf("%f", &num);
因为输入的是 字符 A ,所以赋值失败,字符A还是保存在 缓存区的,所以 getchar() 得到的是 字符 A
我用变量接收了一下 getchar(),发现是之前输入的字符 A,循环条件成立
你在 status = scanf("%f", &num); 之后 加个语句
char temp_a = getchar();
printf("%c",temp_a);
就可以发现 temp_a 的值是 输入的字符 A,然后就可以正常退出循环了
怪得很,可能理解的还不是很透彻, ...
|