QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 847|回复: 12

程序执行顺序的疑惑

[复制链接]
发表于 2005-1-18 18:45:56 | 显示全部楼层 |阅读模式
int main()
{
char ch;
initsrc();
move(5,10);
printw("%s","Hello world!");
refresh(0;
sleep(2);
endwin();
printf("Hello\n");
ch=getchar();
printf("%c\n",ch);
exit(0);
}
出来结果是先getchar,然后标准输出Hello
可是我觉得应该先输出Hello,再读入字符的
为什么会出现这样的?

谢谢各位了
发表于 2005-1-18 20:31:27 | 显示全部楼层
可能是没刷新输出
回复

使用道具 举报

 楼主| 发表于 2005-1-18 21:25:23 | 显示全部楼层
我想大概也就是这个意思吧

怎么样刷新输出?
现在情况是getchar之后才输出,怎么样刷新一个?也就是做到在getchar之前?
回复

使用道具 举报

 楼主| 发表于 2005-1-18 21:29:03 | 显示全部楼层
忘了说了,把那个printf("Hello\n"); 改成write的话顺序又是对的

我就想,printf里面到底还有什么样的东西?某种激励因素,就像window里面的refresh?
回复

使用道具 举报

 楼主| 发表于 2005-1-19 21:52:56 | 显示全部楼层
为什么没有人回答?
回复

使用道具 举报

发表于 2005-1-19 23:07:32 | 显示全部楼层
问题就是输出缓冲没刷.

这个问题我也关注一下.

楼下大哥接着回答!
回复

使用道具 举报

发表于 2005-1-20 00:28:47 | 显示全部楼层
不了解ncurese
回复

使用道具 举报

发表于 2005-1-20 13:50:33 | 显示全部楼层
write不使用缓冲
回复

使用道具 举报

 楼主| 发表于 2005-1-20 19:35:22 | 显示全部楼层
那么怎样消除printf缓冲引起的问题呢?
就像上面的程序,怎么样使得Hello先出来?
回复

使用道具 举报

发表于 2005-1-20 19:52:58 | 显示全部楼层
如果是printf的话后面跟一行fflush(stdout);就行了
回复

使用道具 举报

 楼主| 发表于 2005-1-20 22:01:39 | 显示全部楼层
了解一些了,谢谢各位

我第一次遇到要用fflush,如果有哪位帮忙说说在什么样的情况下需要用fflush输出缓冲区内容的话,就圆满了:)

我又看了一下,前面没有initscr等内容的话,好像不需要fflush 的,但是有了的话,后面一定得有这个调用才可以。为什么?我想知道。
回复

使用道具 举报

发表于 2005-1-21 00:39:02 | 显示全部楼层
在ncurses里用fflush不知道有没有用,ncurses应该有自己的刷新函数。
回复

使用道具 举报

 楼主| 发表于 2005-1-21 12:36:51 | 显示全部楼层
window里面的刷新就是refresh()。

我想知道什么情况下标准输出printf也要刷新,因为这次是我第一次遇到要刷新的,以前的都是自动刷新完毕的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 17:30 , Processed in 0.063429 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表