c++中txt的换行问题

#include<iostream>#include<fstream>#include<cstdlib>usingnamespacestd;voidcopy_line(i... #include<iostream>
#include<fstream>
#include<cstdlib>

using namespace std;
void copy_line(istream& file);

int main()
{
ifstream fin("F:/data.txt");
if(!fin)
{
cout<<"file open failed"<<endl;
return -1;
}
copy_line(fin);
copy_line(cin);
return 0;
}

void copy_line(istream& file)
{
char ch;
do
{
file.get(ch);
cout<<ch;
}while(ch!='\n');
}

为什么程序执行的时候,不会终止? txt没有换行符吗?求解释,谢谢。
展开
 我来答
appsys01
2011-06-12 · 超过25用户采纳过TA的回答
知道答主
回答量:108
采纳率:0%
帮助的人:0
展开全部
void copy_line(istream& file)
{
char ch;
do
{
file.get(ch);
cout<<ch;
}while(ch!='\n'&&file); //文本文件里面可能有换行符,有些可能没有,while(file)指文件没有结尾的话。。。,在C里面,相当于EOF(),也就说若读出的字符是换行符或者文件已结束,那么本函数结束。不知道这样说懂不?

}
追问
需要输出一行数据,不是输出整个文本
追答
恩  能否试试 while(ch!='\n'&&file);  改成:  while(ch!='\n' &&ch!='\13'&&file);  
我没有编程环境试不了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-06-12
展开全部
txt文件里不一定有换行符,
void copy_line(istream& file)
函数很可能变成死循环,改成以下代码就不会了
void copy_line(istream& file)
{
char ch;
do
{
file.get(ch);
cout<<ch;
}while(ch!='\n'&&file); //这里有修改
}
追问
请问修改的地方是什么意思呢?能详细解释一下吗?我加50分
追答
while(file) 和你程序里用过的 if(!fin) 类似,都是对输入流进行判断
输入流 istream 对象有一个 成员fail,当fail =1时,表示流不能执行读入任务了,原因有流到了结尾(比如文件到了结尾)或者流当前的数据与目标格式不匹配等等,当fail =0时,表示流正常
if(!fin) 意思就是问输入流 fin 是否不能执行读入任务,相当于 if(fin.fail)
while(file) 的意思是问输入流是否正常,相当于while(!file.fail)
do{
......
}while(ch!='\n'&&file); 循环执行条件是输入流正常并且前一个字符不是'\n'
当文件到了结尾处file.fail=1,条件不成立,起退出循环作用
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雪写江山
2011-06-12 · 超过35用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:103万
展开全部
请问你是要输出一行的信息吗,加&&file是file.get(ch);读取到数值时返回1,而出错返回0,
追问
我只想输出一行数据,需要一行的终止符做判断条件
追答
终止判定可以就用这个ch!='\n'&&file
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
路图元
2011-06-12 · TA获得超过255个赞
知道小有建树答主
回答量:368
采纳率:0%
帮助的人:275万
展开全部
你想对文件一行一行输出的话要用到getline(文件名,string变量)这个方法,就好了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chukuo25
2011-06-12 · TA获得超过1312个赞
知道小有建树答主
回答量:1504
采纳率:0%
帮助的人:0
展开全部
New line,换行。
追问
..可是输出的是整个文件信息,而不是一行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式