关于 论坛首页上被推荐的 <<超级恶心的面试题>>

xbc1987 2008-11-22 11:32:32
int main(){ 
FILE *f[]={fopen("con","w"),fopen("con","w")};
for(int i=1;i <10;fprintf(f[(i+1)%2],"%d\n",i++));
return 0;
}
有高人在么 可否给说明一下
那个帖子太长了
还打不开 只好另一起一篇
...全文
159 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jason20Ming 2011-03-18
  • 打赏
  • 举报
回复
有意思~~~这个解释得很透彻
demonxjj 2009-01-31
  • 打赏
  • 举报
回复
可能那是你编译器在编译fprintf(f[(i)%2],"%d\n",i);的问题...
你可以这样写,应该会一样
#include<stdio.h>
#include<windows.h>
int main(){
FILE *f[]={fopen("con","w"),fopen("con","w")};
/*
这个原贴有说明
con表示控制台,输入指的是键盘,输出指的是显示器;
当然可以换成别的了:
换成 prn 就会输出到打印机;
换成 abc.txt 就输出到文件 abc.txt 了.
*/
for(int i=1;i <10;i++)
{
fprintf(f[(i)%2],"%d\n",i);

}
/*
i为奇的时候输出到f[0] 为偶的时候输出到f[1]
这样就实现原贴功能了
*/
//fflush(f[0]);
//fflush(f[1]);
// fclose(f[1]);
//fclose(f[0]);
return 0;
}
在进程结束时,首先清空f[0]在关闭它
xbc1987 2008-11-24
  • 打赏
  • 举报
回复
用vc 和 devcpp的结果不一样啊
二者的结果反过来了
树先生 2008-11-22
  • 打赏
  • 举报
回复
UP
K行天下 2008-11-22
  • 打赏
  • 举报
回复
就呆在云上 2008-11-22
  • 打赏
  • 举报
回复
我记得我在另个帖子分析过了啊
con是一个对控制台cmd的标准输入,呵呵,分别用两个文件指针打开,然后分别写入奇数和偶数,输入到这两个文件指针:
 for(int i=1;i <10;fprintf(f[(i+1)%2],"%d\n",i++)); 

令人不解的是,应该是一个奇数,一个偶数轮流在控制台上面显式,对吧?
之所以不是的,是因为,con对控制台写入是带全缓冲的,因此在关闭文件描述符号的时候,才会把文件里面的写入到cmd,关键原因就是因为con是带缓冲的!

如果你用下面的程序来实现,写入文件,而写入文件是不带全缓冲的,而不是带行缓冲,那么写入一行就就会显式一次,那么结果就是只有奇数:
这里是行输出:
"%d\n"

int main(){ 
FILE *f[]={fopen("readme.txt","w"),fopen("readme.txt","w")};
for(int i=1;i <10;fprintf(f[(i+1)%2],"%d\n",i++));
return 0;
}


输出:
1
3
5
7
9




lsldd 2008-11-22
  • 打赏
  • 举报
回复
是啊,看见一堆人讨论,就没人分析原理
谢谢了
chenzhp 2008-11-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zmlovelx 的回复:]
C/C++ code
int main(){
FILE *f[]={fopen("con","w"),fopen("con","w")};
/*
这个原贴有说明
con表示控制台,输入指的是键盘,输出指的是显示器;
当然可以换成别的了:
换成 prn 就会输出到打印机;
换成 abc.txt 就输出到文件 abc.txt 了.
*/
for(int i=1;i <10;fprintf(f[(i+1)%2],"%d\n",i++));
/*
i为奇的时候输出到f[0] 为偶的时候输出到f[1]
这样就实现原贴功能了
*/
return 0;
}
[/Quote]

真详细
帅得不敢出门 2008-11-22
  • 打赏
  • 举报
回复

int main(){
FILE *f[]={fopen("con","w"),fopen("con","w")};
/*
这个原贴有说明
con表示控制台,输入指的是键盘,输出指的是显示器;
当然可以换成别的了:
换成 prn 就会输出到打印机;
换成 abc.txt 就输出到文件 abc.txt 了.
*/
for(int i=1;i <10;fprintf(f[(i+1)%2],"%d\n",i++));
/*
i为奇的时候输出到f[0] 为偶的时候输出到f[1]
这样就实现原贴功能了
*/
return 0;
}

65,210

社区成员

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

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