cerr问题

cyy219 2004-05-07 07:14:22
//**********************
//** ch19_1.cpp **
//**********************

#include<iostream.h>

void fn(int a, int b)
{
if(b==0)
cerr <<"zero encountered. "
<<"The message cannot be redirected";
else
cout <<a/b <<endl;
}

void main()
{
fn(20,2);
fn(20,0);
}
这个代码说执行结果为:
c>ch19_1>abc.dat
zero encountered.The message cannot be redirected.
写到cerr上的信息是不能被重定向,只能在屏幕上显示,但我运行后为
10
zero encountered.The message cannot be redirected.
怎么没见abc.dat文件呀?

...全文
85 11 点赞 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
vcchunhong 2004-05-09
呵`
  • 打赏
  • 举报
回复
newegg2002 2004-05-08
唉.这么多人误解了重定向啊..
虽然有人尽力解释了..
我也来说一下:
其实c>ch19_1>abc.dat根本不可能是输出的结果,,它是在prompt下输入的一个命令,,然后呢..该程序的输出结果便会定向到同目录下的abc.dat中.....我们可以这样来实现楼主的意思..假设该工程在C盘根目录下,工程名为ch19_1,那么有命令提示符下定位到如下目录:
c:\ch19_1\debug这个目录中有生成的ch19_1.exe.在此目录下,执行以下命令:
ch19_1>abc.dat执行后,在同目录下.便找见abc.dat.打开后...会出现程序运行的结果,,为10;
没有zero encountered.The message cannot be redirected.这句.这也是因为写到cerr上的信息是不能被重定向,只能在屏幕上显示,,
  • 打赏
  • 举报
回复
cyy219 2004-05-08
Hotman_x(小人),能不能麻烦你说清楚点,我是用vc编译的,要怎样才会得到c>ch19_1>abc.dat
zero encountered.The message cannot be redirected.
这个结果,什么时候输入abc这个文件名呀?不懂。。。。
  • 打赏
  • 举报
回复
jp311 2004-05-07
没用过唦,用LINUX用多了:)
  • 打赏
  • 举报
回复
代码之诗 2004-05-07
jiangpeng(JP):
Windows shell下用什么就不知道了:(
--------------------------------------------------------------

Windows Shell 也一样,怎么会不知道呢?
  • 打赏
  • 举报
回复
代码之诗 2004-05-07
居然有这么多人不知道重定向是怎么回事,偶就多说几句(臭鸡蛋不要砸过来):

在绝大部分操作系统上,重定向符都是用 > ,这是 UNIX 的历史渊源。但是只写一个 > 其实是简写式,它等同于 1> ,在 > 前面的数字是指文件操纵符,标准输出是 1,标准错误输出是 2。事实上你可以把任何文件重定向,在 Linux 上,所有打开的文件操作符是严格线性增长的……
不说了,喝多了。
  • 打赏
  • 举报
回复
jp311 2004-05-07
使用>不会重定向标准错误输出。有种方法可以在除非Bourne shell下重定向标准输出和标准错误输出。

非Bourne shell下
ch19_1 >& abc.dat

Bourne shell下
ch19_1 &> abc.dat
也可以只重定向stderr
ch19_1 2> abc.dat
因为stderr的File Handle总是被指定为2

Windows shell下用什么就不知道了:(
  • 打赏
  • 举报
回复
代码之诗 2004-05-07
谁说 cerr 不能重定向?????
无论在 Linux 下还是 Windows 的 Console 下,这样写:

chl9_1 2> abc.dat

就能把 cerr 重定向到 abc.dat
  • 打赏
  • 举报
回复
neverfor 2004-05-07
这个程序如果能输出
c>ch19_1>abc.dat
那公鸡也会下蛋了
  • 打赏
  • 举报
回复
bm1408 2004-05-07
不太理解你的意思!

cout与cerr的区别说是
cout会先将数据存储到BUFFER中,而CERR则直接做输出!
一般用COUT,因为常用CERR的话,会增加I/O的次数,降低程序的运行时间!
  • 打赏
  • 举报
回复
hobowang 2004-05-07
什么abc.dat?

人家还有别的代码吧。。。
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-05-07 07:14
社区公告
暂无公告