C++请问这个程序错在哪里

这是一个程序改正问题,我不太清楚它错在哪里,其中save是已有的文件里面也有内容,还有请重点解释一下while(!in.getline(buffer,80))和while... 这是一个程序改正问题,我不太清楚它错在哪里,其中save是已有的文件里面也有内容,还有请重点解释一下while(!in.getline(buffer,80))和while(!in.getline(buffer,80).eof())这两句话,不太明白谢谢了
#include<iostream>
#include<fstream>
using namespace std;
void main()
{
char buffer[80];
ifstream in("save.txt");
while(!in.getline(buffer,80))
{
cout<<buffer<<endl;
}//读入指针不断向后移直到到达文件末尾
while(!in.getline(buffer,80).eof())
{
cout<<buffer<<endl;
}
}
展开
 我来答
intehel
2014-09-06 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1774万
展开全部
这个代码逻辑是有问题的。或者逻辑不明。
while(!in.getline(buffer,80))
当getline失败时跳出循环,如果save.txt正常不为空,那么第一次调用getline成功就会导致循环条件不成立,循环体内的cout<<buffer<<endl;不会执行,也就是文件的第一行被跳过。

然后while(!in.getline(buffer,80).eof())判断是否到文件末尾,在文件结束前,将每一行的前79个字
符输出,这倒是没错。

整个代码的问题在于,如果你的save.txt文件为空或者压根不存在或者打不卡,第一个循环while(!in.getline(buffer,80))将是一个死循环。
追问
哦,我还想问一下,getline 函数返回的是buffer数组最后一个字符么,那个eof语句执行顺序是从左到右么
追答
getline函数返回istream的引用,对于in.getline(...)返回的就是in本身。

!in.getline(buffer,80).eof()就是!((in.getline(buffer,80)).eof()),因为!的优先级比.低。
奥村燐240875
2014-09-06 · TA获得超过151个赞
知道答主
回答量:101
采纳率:50%
帮助的人:108万
展开全部
没错,可以正常编译并运行的。
输出为:I say:"C++" He says:"C++ is very interesting!"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Rankabc
2014-09-06 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1073万
展开全部
in.getline(buffer,80) 读取一行数据到buffer数组

in.getline(buffer,80).eof() 判断文件结尾
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式