社区
C语言
帖子详情
请问scanf 缓冲区问题
outpainfo
2010-08-29 04:45:49
#include<stdio.h>
#include<stdlib.h>
int main()
{
char buff[10];
int j;
printf("enter a num:");
while(scanf("%d",&j)==0)
{
gets(buff); /*这个和buf具体什么作用,怎么工作的?*/
printf("enter a num:");
}
printf("%d\n",j);
return 0;
}
...全文
125
4
打赏
收藏
请问scanf 缓冲区问题
#include #include int main() { char buff[10]; int j; printf("enter a num:"); while(scanf("%d",&j)==0) { gets(buff); /*这个和buf具体什么作用,怎么工作的?*/ printf("enter a num:"); } printf("%d\n",j); return 0; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hongshenlin
2010-08-29
打赏
举报
回复
如果对你有帮助的话,记得结贴!
hongshenlin
2010-08-29
打赏
举报
回复
while(scanf("%d",&j)==0)
{
gets(buff); /*这个和buf具体什么作用,怎么工作的?*/
printf("enter a num:");
}
scanf("%d",&j)语句是从缓冲区接收一个十进制整数。输入正确数据存放到变量表示的存储区中。同时scanf()函数返回一非零值。如果数据不正确,输入的数据仍然在缓冲区中。scanf()函数返回零值。
在你的程序中循环体执行的条件即是scanf()如果接受的是错误的数据则执行循环体,不是十进制数,那么肯定是字符。故用gets将字符串给接受了(缓冲区就没有内容了)并将接收的内容存放在数组buff中。这是程序本意。
但是实际上你的程序不能检查数据的正确性,具体为什么多验证几次不同的输入你就知道了。
十八道胡同
2010-08-29
打赏
举报
回复
对于gets函数 楼主可以参考http://topic.csdn.net/u/20100828/00/8523fb02-9ea2-49d8-abc5-0142faceb27b.html
wing_0706
2010-08-29
打赏
举报
回复
因为你scanf 要 回车结束。。
gets(buff); 可以接受回车。。 以及内存里 过多的东西。。
说不定你 你sanf输入时 多 输入的 东西 但是 没被接收。。
结合C语言
缓冲区
谈
scanf
()函数
scanf
() 是带有
缓冲区
的。遇到
scanf
() 函数,程序会先检查输入
缓冲区
中是否有数据: • 如果没有,就等待用户输入。用户从键盘输入的每个字符都会暂时保存到
缓冲区
,直到按下回车键,输入结束,
scanf
() 再从
缓冲区
中读取数据,赋值给变量。 • 如果有数据,哪怕是一个字符,
scanf
() 也会直接读取,不会等待用户输入
深入理解
scanf
函数输入时键盘
缓冲区
本文从根本上讲解了
scanf
函数的应用,以及输入时键盘
缓冲区
的数据形式,相信读完之后你会对
scanf
有更深一层次的认识。
C语言入门到高阶-- printf、
scanf
与 CGI 文件重定向
尹成老师,带你步入 C 语言的殿堂,讲课生动风趣、深入浅出,全套视频内容充实,整个教程以 C 语言为核心,完整精彩的演练了数据结构、算法、设计模式、数据库、大数据高并发检索、文件重定向、多线程同步、进程通讯...
scanf
缓冲区
刷新
问题
最近在Linux终端写代码时,使用
scanf
输入一个字符,当不小心输入了一个退格键或者方向键时,程序就出现无限读取的现象,这显然是
scanf
的
缓冲区
内的字符无法刷新出去,即研究一下
scanf
缓冲区
的刷新规则。
scanf
缓冲区
的刷新规则 当
scanf
从
缓冲区
读取走需要的数据之后,
缓冲区
应该会被清空,但在某些情况下,
缓冲区
并不会会清空,使用下面的代码检测一下什么情况下
缓冲区
不会被清空: 输入数字 ...
了解
scanf
缓冲区
scanf
缓冲区
在学习
scanf
之前,先来了解以下“
缓冲区
”这个概念。 我们从键盘输入的都是字符,
scanf
中的“%d”会将从键盘中输入的字符转换为整型,其它类型亦如此。当我们从键盘输入时,数据会先存入
缓冲区
。但是!当我们输入一个整型数字时,会用回车来结束,那么回车这个按键也会留在
缓冲区
,对应的时 ‘\n’ 。了解这一点,然后我们来看一个栗子。 #include <stdio.h> #include <stdlib.h> int main() { int m; char c;
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章