关于磁盘缓冲区的疑问

guosen1987 2008-04-06 09:49:09
加不加fflush(stdin);是由什么决定的呢?磁盘缓冲区的理解上又些不是太明白,请把下面的程序缓冲输入输出给于解释
#include<cstdio>
int main()
{
int n;//存放数组的动态长度
int i;
char *p;
printf("input n=");
scanf("%d",&n);
fflush(stdin);//加与去掉很大差别的原因是?
p=new char[3];
for(i=0;i<n;i++)
scanf("%c",&p[i]);
for(i=0;i<n;i++)
printf("%c",p[i]);
return 0;
}
...全文
311 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
悠悠长风 2008-04-07
  • 打赏
  • 举报
回复
没有flush,I/O函数一般都是默认为行缓冲。
也就是说,输入完整一行,才会真正输入/输出。
「已注销」 2008-04-07
  • 打赏
  • 举报
回复
#include<cstdio>
int main()
{
int n,e;//存放数组的动态长度
int i;
char *p;
printf("input n=");
scanf("%d",&n);
//fflush(stdin);//加与去掉很大差别的原因是?,\n被p接收
p=new char[3];
for(i=0;i<n;i++)
scanf("%c",&p[i]);
for(i=0;i<n;i++)
printf("%c",p[i]);
scanf("%d",&e);//此处就相当于直接在上面的scanf后了,因为输入是一个流,不会终止
printf("%d",e);//也就是说你可以一次性输入所有的数,当然不能超过磁盘缓冲区大小
return 0;
}
不想低调 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lori_c 的回复:]
在读入即将输入的数据前,都可以加fflush确保读入数据正确
[/Quote]
lori_c 2008-04-06
  • 打赏
  • 举报
回复
在读入即将输入的数据前,都可以加fflush确保读入数据正确
abupie 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 barenx 的回复:]
fflush(stdin);清除输入缓冲,使回车后键入的字符不会被下次读取的指令读入
也就是下次程序请求用户输入的时候,用户好重新键入,提前键入在缓冲区内的字符都将无效
[/Quote]
barenx 2008-04-06
  • 打赏
  • 举报
回复
fflush(stdin);清除输入缓冲,使回车后键入的字符不会被下次读取的指令读入
也就是下次程序请求用户输入的时候,用户好重新键入,提前键入在缓冲区内的字符都将无效
「已注销」 2008-04-06
  • 打赏
  • 举报
回复
#include<cstdio>
int main()
{
int n;//存放数组的动态长度
int i;
char *p;
printf("input n=");
scanf("%d",&n);
//fflush(stdin);//加与去掉很大差别的原因是?,\n被p接收
p=new char[3];
for(i=0;i<n;i++)
scanf("%c",&p[i]);
for(i=0;i<n;i++)
printf("%c",p[i]);
return 0;
}
难到是这个?\n被接收?有点不可理解.

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧