为了账号安全,请及时绑定邮箱和手机立即绑定

本人是新手 望高手解答 感激不尽!

本人是新手 望高手解答 感激不尽!

C
慕田峪7331174 2022-12-22 13:08:09
#include <stdio.h>int main( void ){int i=1;while(i) {printf("Please input an integer: ");scanf("%d", &i);printf("%d\n", i);}return 0;}上面的程序是循环地让用户每次都输入一个整数的,一旦用户输入了错误的数据,比如字母,就会进入死循环。我知道是因为字母被留在了缓冲区,scanf就不会等待用户输入而直接去读取缓冲区的数据,但是无法读到正确的数据,字母还在缓冲区,所以死循环了。这时候加上fflush(stdin);可以解决这个问题我的问题是,如果我输入的是正确的数据,比如整数“2”,这时候2是被留在了缓冲区,那么第二次scanf不是应该不等待我输入而又去读取缓冲区中的"2"了吗?简言之,因为scanf没有清除数据的功能,而是直接读,那么上一次就算我输入了正确的数据类型,下一次的循环时scanf不是也会继续去读上一次留在缓冲区的数据了吗?
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

你最后一段话错了。如果类型正确的话,数据会从缓冲区取出。

输入字符进入死循环后不断输出上一个数据,是因为 i 停止了赋值,值为最后一次赋值

查看完整回答
反对 回复 2022-12-25
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号