主题:新手求修改
kcs07
[专家分:0] 发布于 2011-11-17 20:40:00
本人新手,遇到了点问题,求修改
C++的
/* 编写程序实现如下功能:打开指定的一个文本文件,在每一行前加行号。 */
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
char buf[100][100];
char fileName[80];
cout << "Please enter the file name: ";
cin >> fileName;
ifstream fin(fileName);
ofstream fout(fileName);
if (!fin)
{
cout << "Unable to open " << fileName <<endl;
return 1;
}
int num=1;
fin.open(fileName,ios::in);
while(!fin.eof())
{
fin.getline(buf[num],100);
num++;
}
fin.close();
num=1;
fout.open(fileName,ios::out);
while(!fout.eof())
{
fout<<num<<"."<<buf[num]<<endl;
num++;
}
fout.close();
return 0;
}
回复列表 (共7个回复)
沙发
argentmoon [专家分:13260] 发布于 2011-11-17 23:09:00
请讲出你碰到了什么问题
板凳
kcs07 [专家分:0] 发布于 2011-11-18 09:10:00
有这两个问题:
文本逐行读取的数据不正确
文本读取是死循环
请问该怎么修改?
3 楼
argentmoon [专家分:13260] 发布于 2011-11-18 11:46:00
一、输入和输出请分成两个文件,你的输入文件被你输出文件给覆盖了。
二、定义ifstream和ofstream的时候默认已经打开文件了,后面就没必要再次open,或者你定义的时候不加filename参数(这样可以不默认打开)。
三、输入死循环问题:while(!fin.eof()) 改成 while(fin) 。
四、输出同样也不要用while(!fout.eof()),你用一个循环for (int i = 1; i <= num; ++i)就可以了
4 楼
kcs07 [专家分:0] 发布于 2011-11-18 13:04:00
我现在改好了,能实现一个文本输入,在另外一个文本输出,代码如下:
请问如何实现同一个文本输入输出呢?
就是光在原来的文本上改变,不另外生成输出的文本
[code=c]
/* 编写程序实现如下功能:打开指定的一个文本文件,在每一行前加行号。 */
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string buf[100];
char fileName[80];
cout << "Please enter the file name: ";
cin >> fileName;
ifstream fin(fileName);
ofstream fout("2.txt");
if (!fin||!fout)
{
cout << "Unable to open " << fileName <<endl;
return 1;
}
int num=1;
while(fin)
{
getline(fin,buf[num]);
num++;
}
fin.close();
int i=1;
while(buf[i].length()!=0)
{
fout<<i<<"."<<buf[i]<<endl;
i++;
}
fout.close();
return 0;
}[/code]
5 楼
argentmoon [专家分:13260] 发布于 2011-11-19 00:11:00
方法很多呀,比较土的,你可以先关掉这个文件,重新以写方式打开,把新的内容写回去。再土一点,你删掉旧文件,把新文件改名成原文件名都可以。
6 楼
argentmoon [专家分:13260] 发布于 2011-11-19 00:18:00
另外给你补充点吧,
while(buf[i].length()!=0) 这样是不行的,
你试着在输入文件里加个空行试试效果。
想知道原因的话,查查getline函数的说明
另外,你在不能保证输入文件有多少行的情况下,你要如何保证你的缓冲区不会溢出呢?
7 楼
kcs07 [专家分:0] 发布于 2011-11-19 10:20:00
嗯嗯,好的
学到了,谢谢
我来回复