回 帖 发 新 帖 刷新版面

主题:新手求修改


本人新手,遇到了点问题,求修改
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个回复)

沙发

请讲出你碰到了什么问题

板凳

有这两个问题:
文本逐行读取的数据不正确
文本读取是死循环

请问该怎么修改?

3 楼

一、输入和输出请分成两个文件,你的输入文件被你输出文件给覆盖了。

二、定义ifstream和ofstream的时候默认已经打开文件了,后面就没必要再次open,或者你定义的时候不加filename参数(这样可以不默认打开)。

三、输入死循环问题:while(!fin.eof()) 改成 while(fin) 。

四、输出同样也不要用while(!fout.eof()),你用一个循环for (int i = 1; i <= num; ++i)就可以了

4 楼

我现在改好了,能实现一个文本输入,在另外一个文本输出,代码如下:
请问如何实现同一个文本输入输出呢?
就是光在原来的文本上改变,不另外生成输出的文本

[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 楼

方法很多呀,比较土的,你可以先关掉这个文件,重新以写方式打开,把新的内容写回去。再土一点,你删掉旧文件,把新文件改名成原文件名都可以。

6 楼

另外给你补充点吧,

while(buf[i].length()!=0) 这样是不行的,

你试着在输入文件里加个空行试试效果。

想知道原因的话,查查getline函数的说明

另外,你在不能保证输入文件有多少行的情况下,你要如何保证你的缓冲区不会溢出呢?

7 楼


嗯嗯,好的
学到了,谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册