关于STDIN_FILENO and printf

qingtian_zhen 2011-12-14 07:40:06
大家好,我在学习的过程中遇到了一个问题:

代码:

#include "ourhdr.h"
#define BUFFSIZE 8192
int main(void)
{
int n;
char buf[BUFFSIZE];
while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)
{
if (write(STDOUT_FILENO, buf, n) != n)
err_sys("write error");
printf("the counter of value is %d", n);
}
printf("the counter of value is %d", n);
if (n < 0)
err_sys("read error");
exit(0);
}

让我疑惑的是在我的printf语句没有输入任何东西,
我把while的部分删除掉,他又可以出来的,本来想看看打印printf的返回值
坑爹的我只会printf, 求助很是不解啊!!!!
...全文
91 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingtian_zhen 2011-12-14
  • 打赏
  • 举报
回复
int main(void)
{

int c ;
int i = 0;
while ((c = getc(stdin)) != EOF)
{
if(putc(c, stdout) == EOF)
err_sys("output error");
printf("this number is %d", ++i);
}
if (ferror(stdin))
err_sys("input error");
exit(0);
}

这种情况为什么没有阻塞啊, 我哭了!!
qingtian_zhen 2011-12-14
  • 打赏
  • 举报
回复
补充或者:

加上 fflush(stdout);
也可以
qingtian_zhen 2011-12-14
  • 打赏
  • 举报
回复
谢谢回复, 我也刚发现我在printf后面加上了\n就可以打印出来,我唯一可以推断的就是printf的buff 被阻塞了, 需要flush 一下, 可坑爹的为什么\n 可以起到flush的作用。望路过的高人解答
seucs 2011-12-14
  • 打赏
  • 举报
回复
printf语句没有输入任何东西??? 这句话你想表达的是什么意思?printf语句没有被正确执行还是参数n的值没有?目测你的程序,如果你的头文件"ourhdr.h"里面包含了<stdio.h>的话,是没有问题的;否则可能就是没有包含<stdio.h>

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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