本人初学C++,做一个C++primer的课后习题,搞了半天还是不能通过测试,好心的帮我看一下原因。

haiquan81 2006-06-13 09:48:28
原题:
编写一个函数,其唯一的形参和返回值都是istream&类型。该个函数应一直读取流直到到达文件结束符为止,还应将读到的内容输出到标准输出中。最后,重设流使其有效,并返回该流。
我写的程序:
#include <iostream>
#include <string>
#include <stdexcept>
using std::runtime_error;
using std::cout;
using std::cin;
using std::endl;
using std::istream;
using std::cerr;


istream &test(istream &);
istream &test(istream & input)
{
int a;
while(input>>a, !input.eof())//这是“,”运算符
{
if (input.bad())
throw runtime_error("IO stream corrupted");
if (input.fail())
{
cerr<<"bad data, try again\n";
input.clear(istream::failbit);
continue;
}
cout<<"reading a int variable is successful\n the number is "<<a<<endl;
}
return input;
}


int main()
{
test(cin);
return 0;
}

出现错误:
当输入一个字符时,一直死循环输出:bad data, try again

大家帮忙看一下吧。
...全文
249 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
塘外人 2006-06-13
  • 打赏
  • 举报
回复
不用异常处理的吧
直接点:
istream &test(istream &);
istream &test(istream & input)
{
string a;
while(getline(input,a))//这是“,”运算符
{
cout << a;
}
input.clear();
return input;
}


int main()
{
test(cin);
return 0;
}
rabbit729 2006-06-13
  • 打赏
  • 举报
回复
istream &test(istream &);
istream &test(istream & input)
{
int a;
while(input>>a, !input.eof())//这是“,”运算符
{
if (input.bad())
throw runtime_error("IO stream corrupted");
if (input.fail())
{
cerr<<"bad data, try again\n";
input.clear(istream::failbit);
continue;
}
cout<<"reading a int variable is successful\n the number is "<<a<<endl;
input.get();//此处添加一句试一下,我没有调试,LZ见谅
}
return input;
}
zzstephen 2006-06-13
  • 打赏
  • 举报
回复
楼上正解
xzq288 2006-06-13
  • 打赏
  • 举报
回复
我试了一下,把int a改为char a
haiquan81 2006-06-13
  • 打赏
  • 举报
回复
df
塘外人 2006-06-13
  • 打赏
  • 举报
回复
楼上的,
())//ÕâÊÇ¡°,¡±ÔËËã·û

这是哪国语言?
Cccufo 2006-06-13
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
#include <stdexcept>
using std::runtime_error;
using std::cout;
using std::cin;
using std::endl;
using std::istream;
using std::cerr;


istream &test(istream &);
istream &test(istream & input)
{
int a;
while(input>>a, !input.eof())//ÕâÊÇ¡°,¡±ÔËËã·û
{
if (input.bad())
throw runtime_error("IO stream corrupted");
if (input.fail())
{
cerr<<"bad data, try again\n";
input.clear(istream::failbit);
break;
}
cout<<"reading a int variable is successful\n the number is "<<a<<endl;
}
return input;
}


int main()
{
test(cin);
return 0;
}
塘外人 2006-06-13
  • 打赏
  • 举报
回复
还是一样 那就这样把:
istream &test(istream &);
istream &test(istream & input)
{
int a;
while(input>>a, !input.eof())//这是“,”运算符
{
if (input.bad())
throw runtime_error("IO stream corrupted");
if (input.fail())
{
cerr<<"bad data, try again\n";
input.clear(); // here
input.ignore();//and here

continue;
}
cout<<"reading a int variable is successful\n the number is "<<a<<endl;
}
return input;
}



int main()
{
test(cin);
return 0;
}
haiquan81 2006-06-13
  • 打赏
  • 举报
回复
我是楼主,首先谢谢大家的回答,可能我没说清楚,题目中还有一个意思:程序要一直读整数,并把它输出,如果是字符的话,就输出“bad data, try again”。
to:xzq288() zzstephen(渣渣) 改成字符的话,就达不到目的了。
to:rabbit729(无名胜有名) 试了,好像不对噢:(
to:yhmhappy2006(Nathan) 程序是很简洁,不过不能达到题目的意思。

等待答案中。。。。

65,186

社区成员

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

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