社区
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;
}
...全文
130
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
作业
写回复
配置赞助广告
用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输入时 多 输入的 东西 但是 没被接收。。
scanf
缓冲区
问题
我们先来看一段代码和其运行结果当我们输入b的值并敲击回车键之后,并没有让我们输入c的值,造成这个现象的原因是因为
scanf
的输入
缓冲区
的
问题
scanf
读取的数据并不是直接从键盘读取,而是键盘输入的数据会先放到输入
缓冲区
中,然后
scanf
从
缓冲区
中读取数据1.输入10并敲击回车键之后输入
缓冲区
的内容如下2.由于是以%d的形式读取数据所以
scanf
会读取
缓冲区
中的数据10 ,分隔符“十进制整数”读取成功之后输入
缓冲区
的内容如下。3.输入20.0并敲击回车键之后输入
缓冲区
的内容如下。
scanf
缓冲区
刷新
问题
最近在Linux终端写代码时,使用
scanf
输入一个字符,当不小心输入了一个退格键或者方向键时,程序就出现无限读取的现象,这显然是
scanf
的
缓冲区
内的字符无法刷新出去,即研究一下
scanf
缓冲区
的刷新规则。
scanf
缓冲区
的刷新规则 当
scanf
从
缓冲区
读取走需要的数据之后,
缓冲区
应该会被清空,但在某些情况下,
缓冲区
并不会会清空,使用下面的代码检测一下什么情况下
缓冲区
不会被清空: 输入数字 ...
C语言bug01 --
scanf
输入时
缓冲区
问题
scanf
函数是标准输入流(从键盘接收数据),接收的数据放入输入
缓冲区
中,其中就包括在键盘输入的空格、回车这类字符,当你用%d接收时是不会影响的,但是用%c就会产生错误,这是因为在"%c"输入时,空格和转义字符均作为有效字符会被%c接收。getchar的作用是读取一个字符,也是输入函数,所以和
scanf
读取数据的过程一样,都是从缓存区中获取数据。为了不跳过第二个
scanf
,我们就可以在接收第二个数之前清空
缓冲区
,用getchar将缓存区的\n取走.C语言
scanf
输入时
缓冲区
问题
。
了解
scanf
缓冲区
scanf
缓冲区
在学习
scanf
之前,先来了解以下“
缓冲区
”这个概念。 我们从键盘输入的都是字符,
scanf
中的“%d”会将从键盘中输入的字符转换为整型,其它类型亦如此。当我们从键盘输入时,数据会先存入
缓冲区
。但是!当我们输入一个整型数字时,会用回车来结束,那么回车这个按键也会留在
缓冲区
,对应的时 ‘\n’ 。了解这一点,然后我们来看一个栗子。 #include <stdio.h> #include <stdlib.h> int main() { int m; char c;
scanf
输入 存入输入
缓冲区
问题
1. **`
scanf
` 跳过空白字符**:当 `
scanf
` 读取数字、字符串、浮点数等常规数据类型时,它会自动忽略
缓冲区
中的空白字符(空格、Tab、换行符)。这时,输入的字符就是 `'\n'`,所以程序会输出换行符。2. **连续使用 `
scanf
`**:如果调用 `
scanf
` 读取的都是标准数据类型(如 `%d`、`%f`、`%s` 等),不会因为
缓冲区
中的空白字符而出现
问题
。2. **使用 `%c` 格式符读取字符** 时可能出现
问题
,因为 `%c` 不会跳过空白字符,而是直接读取
缓冲区
的内容。
C语言
70,020
社区成员
243,265
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章