将已编辑的infile保存到c ++

时间:2016-04-20 22:24:59

标签: c++

我在这里编写最后一段编码问题。 //将文件从infile复制到outfile。程序传输我的infile,它只是一个8位数字,20392207,使用.at方法将其分成单个数字;并且应该将该输出保存到outfile。我无法弄清楚如何将输出保存到outfile。有什么建议吗?

infile看起来如下

20392207

程序输出如下所示

The input number :20392207
The number 1:2
The number 2:0
The number 3:3
The number 4:9
The number 5:2
The number 6:2
The number 7:0
The number 8:7

outfile应该看起来像程序输出,但只是看起来像infile的精确副本。

#include<iostream>
#include<fstream>
#include<cstdlib>
#include<string>
#include<cmath>
using namespace std;
int main()
{
    string ifilename, ofilename, line, line2;
    ifstream inFile, checkOutFile;
    ofstream outFile;
    char response;
    int i;


    // Input file
    cout << "Please enter the name of the file you wish to open : ";
    cin >> ifilename;
    inFile.open(ifilename.c_str());
    if (inFile.fail())
    {
        cout << "The file " << ifilename << " was not successfully opened." << endl;
        cout << "Please check the path and name of the file. " << endl;
        exit(1);
    }
    else
    {
        cout << "The file is successfully opened." << endl;
    }


    // Output file
    cout << "Please enter the name of the file you wish to write : ";
    cin >> ofilename;
    checkOutFile.open(ofilename.c_str());
    if (!checkOutFile.fail())
    {
        cout << "A file " << ofilename << " exists.\nDo you want to continue and overwrite it? (y/n) : ";
        cin >> response;
        if (tolower(response) == 'n')
        {
            cout << "The existing file will not be overwritten. " << endl;
            exit(1);
        }
    }
    outFile.open(ofilename.c_str());
    if (outFile.fail())
    {
        cout << "The file " << ofilename << " was not successfully opened." << endl;
        cout << "Please check the path and name of the file. " << endl;
        exit(1);
    }
    else
    {
        cout << "The file is successfully opened." << endl;
    }



    // Copy file contents from inFile to outFile
    while (getline(inFile, line))
    {
    cout << "The input number :" << line << endl;
        for (i = 0; i < 8; i++)
        {
            cout << "The number " << i + 1 << ":";
            cout << line.at(i);
            cout << endl;
        }

    outFile << line << endl;    
    }



    // Close files
    inFile.close();
    outFile.close();
} // main

2 个答案:

答案 0 :(得分:1)

在这里我们可以看到outFile只写在while循环之外:

while (getline(inFile, line))
{
    cout << "The input number :" << line << endl;
    for (i = 0; i < 8; i++)
    {
        cout << "The number " << i + 1 << ":";
        cout << line.at(i);
        cout << endl;
    }
}
outFile << line << endl;

它无法包含与控制台相同的输出

解决方案:在循环内写入写入控制台的相同内容:

while (getline(inFile, line))
{
    cout << "The input number :" << line << endl;
    outFile << "The input number :" << line << endl;
    blah blah blah
}

但这看起来像垃圾和功能通过消除重复和提高可重用性而成为更好的解决方案。

void output(std::ostream & out,
            const std::string & line)
{
    out << "The input number :" << line << endl;
    for (int i = 0; i < 8; i++)
    {
        out << "The number " << i + 1 << ":";
        out << line.at(i);
        out << endl;
    }
}

并致电:

while (getline(inFile, line))
{
    output(cout, line);
    output(outFile, line);
}

答案 1 :(得分:0)

您需要在outFile循环内写入while(getline(inFile, line))

[edit]请参阅user4581301的答案,以获得更彻底的治疗。