scanf()后用gets()出现跳过……求详细的解释……

2020-09-13 科技 70阅读
缓冲区里保留所有从键盘打入的键,包括空格,空白键,回车。
输入语句 scanf(),gets(), ...都是到 缓冲区 里 按语法规则 读东西,转换内容。
当 缓冲区 里 内容 用完了,或不够 输入语句 用 时,输入语句 等待....。
从键盘打入的东西,只有当遇到 Enter 键 时,才 通过 操作系统 进 缓冲区,没遇到 Enter 键不进 (或者说scanf(),gets(), 等语句,没遇到 Enter 键输入事件发生时,不开始工作)。
空白和回车何时被用掉与读语句种类和读法读的格式有关。
gets() 是读一行字符串,包括在前在后在半当中的 空格,空白,....
scanf("%d",&k); 和 scanf("%d\n",&k); 不同。后者可以吃掉一个 Enter 键。
简单保险的办法是用 fflush(stdin); 清除 输入缓冲区。你就 不用担心 输入行 残留 的数字,字符,空白和Enter 键:
scanf(。。。); fflush(stdin); 再 gets();
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com