为什么会如此烦躁呢?

whuyotc 2008-09-12 03:50:30
遇到一个很烦躁的地方
以前学习c语言最害怕的地方就是关于文件处理的地方

本以为学习c++之后只会合cin cout getline打交道了
没想到还是在c++中遇到c语言中的一些让偶头疼得要死的地方

且看下面一个小程序(源自c++编程思想卷1中文版)

incline void require(bool requirement,const std::string &msg="Requirement failed")
{
using namespace std;
if(!requirement)
{
fputs(msg.c_str(),stderr);//此句究竟是什么意思啊 ?????
fput("\n",stderr);
}
exit(1);
}

这个程序看了半个小时很郁闷
1 fputs不就是向文件里面写字符串的命令么???是这样么?
然后既然是写字符串,为何还要msg.cstr(),这不成了名字么?????

2 stderr怎么理解它呢?我知道stderr是系统默认的错误输出,是这样么???

3 fputs(msg.c_str(),stderr);这一句看起来很难过

能不能够写成
ostream out(msg.c_str);
out<<stderr

请高手们指教啊

...全文
118 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
whuyotc 2008-09-12
  • 打赏
  • 举报
回复
哎呀
我怎么这么糊涂啊
太谢谢您了啊
谢谢啊
[Quote=引用 13 楼 e_sharp 的回复:]
cout < <zz.c_str();
cerr < <zz.c_str();

-----------

不会的,lz有没有#include <string> ?
[/Quote]
e_sharp 2008-09-12
  • 打赏
  • 举报
回复
cout < <zz.c_str();
cerr < <zz.c_str();

-----------

不会的,lz有没有#include <string> ?
whuyotc 2008-09-12
  • 打赏
  • 举报
回复
谢谢您啊
也非常谢谢您在11楼的回复啊

我现在遇到一个更为弱智的问题
我的软件平台是vs2008

现在
我居然发现了这个问题

string zz("wh");
string zz="wh"

cout<<zz;
cerr<<zz;

这两个都不能够输出啊??

非要cout<<zz.c_str();
cerr<<zz.c_str();





[Quote=引用 10 楼 e_sharp 的回复:]
引用 6 楼 whuyotc 的回复:
incline void require(bool requirement,const std::string &msg="Requirement failed")
{
using namespace std;
if(!requirement)
{
fputs(msg.c_str(),stderr);
fput("\n",stderr);
}
exit(1);
}


这个程序是不是将Requirement failed这个字符串输出到屏幕啊
而起作用的是这fputs(msg.c_str(),stderr);
是这样么??


是的,fputs(m…
[/Quote]
e_sharp 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 whuyotc 的回复:]
谢谢啊

我还想请问一下

为什么我这样写不对呢??

ifstream in("d:\\zn.txt");
ofstream out("d:\\zn.txt");

string zz("wh");
fputs(zz.c_str(),in);
fputs(zz.c_str(),out);

为什么这两种都不能够呢??

报错信息如下

“不能将参数2从std::ifstream转化为FILE *”

请高手们再次答下疑呀
tkx!!
[/Quote]

看看fputs的原型
int fputs ( const char * str, FILE * stream );//需要的是文件指针

再看看stdin,stdout,stderr:
FILE * stdin;
FILE * stdout;
FILE * stderr;

c++中的ifstream和c中的FILE* 不是一个类型
e_sharp 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 whuyotc 的回复:]
incline void require(bool requirement,const std::string &msg="Requirement failed")
{
using namespace std;
if(!requirement)
{
fputs(msg.c_str(),stderr);
fput("\n",stderr);
}
exit(1);
}


这个程序是不是将Requirement failed这个字符串输出到屏幕啊
而起作用的是这fputs(msg.c_str(),stderr);
是这样么??
[/Quote]

是的,fputs(msg.c_str(),stderr); 输出到stderr,stderr默认是输出到屏幕

可以使用cerr代替: cerr << msg << endl;
whuyotc 2008-09-12
  • 打赏
  • 举报
回复
谢谢啊

我还想请问一下

为什么我这样写不对呢??

ifstream in("d:\\zn.txt");
ofstream out("d:\\zn.txt");

string zz("wh");
fputs(zz.c_str(),in);
fputs(zz.c_str(),out);

为什么这两种都不能够呢??

报错信息如下

“不能将参数2从std::ifstream转化为FILE *”

请高手们再次答下疑呀
tkx!!
ttkk_2007 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 whuyotc 的回复:]
incline void require(bool requirement,const std::string &msg="Requirement failed")
{
using namespace std;
if(!requirement)
{
fputs(msg.c_str(),stderr);
fput("\n",stderr);
}
exit(1);
}


这个程序是不是将Requirement failed这个字符串输出到屏幕啊
而起作用的是这fputs(msg.c_str(),stderr);
是这样么??
[/Quote]
是这样,当且仅当requirement为false
ttkk_2007 2008-09-12
  • 打赏
  • 举报
回复
1 fputs不就是向文件里面写字符串的命令么???是这样么?
是写字符串,但是第一个参数必须是char*,所以你的string类型必须调用c_str方法转换为char*

2 stderr怎么理解它呢?我知道stderr是系统默认的错误输出,是这样么???
标准错误输出文件


whuyotc 2008-09-12
  • 打赏
  • 举报
回复
incline void require(bool requirement,const std::string &msg="Requirement failed")
{
using namespace std;
if(!requirement)
{
fputs(msg.c_str(),stderr);
fput("\n",stderr);
}
exit(1);
}


这个程序是不是将Requirement failed这个字符串输出到屏幕啊
而起作用的是这fputs(msg.c_str(),stderr);
是这样么??
zhuwanglove 2008-09-12
  • 打赏
  • 举报
回复
string中c_str()函数是将C++的字符串类型转换成char *类型。
lala_benben 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hai040 的回复:]
c的文件io函数基本上都是基本io函数前加上f,再加个文件参数
int fputs (const char *string,FILE *stream)
stderr是错误输出,通常跟stdout一样
[/Quote]

C++中也有输出错误的方法啊
hai040 2008-09-12
  • 打赏
  • 举报
回复
c的文件io函数基本上都是基本io函数前加上f,再加个文件参数
int fputs (const char *string,FILE *stream)
stderr是错误输出,通常跟stdout一样
lann64 2008-09-12
  • 打赏
  • 举报
回复
这样 out <<stderr 恐怕不行,o(∩_∩)o...
九桔猫 2008-09-12
  • 打赏
  • 举报
回复
可以。

看C++Primer 中关于IO的介绍,多看几遍,以后就不是问题了。
背景:将工业风力涡轮机引入加拿大安大略省安静的农村环境中,导致人们对环境噪声和不良健康影响提出了投诉。 安大略省有一个程序,居民可以向政府报告噪音。 通过“信息自由”请求获得了居住在运行中的风力发电机组附近的居民提交的政府事件报告/投诉的官方记录。 本文在评估事件报告/投诉的重要性的同时,对此过程进行了评估。 方法:分析政府对事件报告/投诉的记录。 同行评议的出版物,议演讲,司法程序,政府资源和其他资源均根据所讨论的主题进行了评估和考虑。 目标:本文的目的是介绍事件报告/投诉的作用和重要性,并讨论在评估与将风力涡轮机引入安静的农村环境相关的结果时这些报告/投诉的价值。 结果:政府记录了安大略热线(2006-2016年)收到的4574个事件报告/投诉文件。 在3000多个已提交的正式投诉中(2006-2014年),政府部门对此没有做出回应。 另有30%被视为“延迟”响应。 只有1%的报告得到了优先答复。 省级官员在摘要报告中指出,人们报告的健康影响包括:头痛,睡眠不足,烦躁不安以及头和耳朵的响声或压力感。 对健康的影响已有许多报道,包括儿童中的健康影响。 讨论:对于风力发电装置,事件报

64,648

社区成员

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

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