首页 > 解决方案 > 从 C++ 中的函数错误地返回值

问题描述

>

代码:

int main ()
{ 

    ifstream inStream;

    ofstream outStream; 
    getInputOutputStreams(inStream, outStream);   

    numberFile(inStream, outStream);

    return EXIT_SUCCESS;
}

我一直遇到一个问题,即我编写的​​代码可以编译,但是在运行时必须终止它,因为它只是滞后。我相信我的问题可能必须处理没有正确返回输入和输出文件的名称,但我无法弄清楚我哪里出错了。我只是 C++ 的初学者(我们刚刚学习数组),所以如果你认为这是一个愚蠢的问题,我很抱歉!

这是我写的代码:

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>

using namespace std;

string getInputOutputStreams(ifstream &inStream, ofstream &outStream);

void numberFile(ifstream &inStream, ofstream &outStream);

int main ()
{
    ifstream inStream;

    ofstream outStream;
    getInputOutputStreams(inStream, outStream);

    numberFile(inStream, outStream);

    return EXIT_SUCCESS;
}

string getInputOutputStreams(ifstream &inStream, ofstream &outStream)
{
    string inputFile;
    string outputFile;

    cout << "Enter the name of the input file:" << endl;
    cin >> inputFile;
    inStream.open(inputFile);

    while (inStream.fail()) {
        cout << "Invalid file name." << endl;
        cout << "Enter the name of an input file:" << endl;
        cin >> inputFile;
        inStream.open(inputFile);
    }
    inStream.close();

    cout << "Enter the name of the output file:" << endl;
    cin >> outputFile;
    outStream.open(outputFile);

    while (outStream.fail()) {
        cout << "Invalid file name." << endl;
        cout << "Enter the name of an output file:" << endl;
        cin >> outputFile;
        outStream.open(outputFile);
    }
    outStream.close();

    return inputFile;
    return outputFile;
}

void numberFile(ifstream &inStream, ofstream &outStream)
{
    string inputFile;
    string outputFile;

    inStream.open(inputFile);
    outStream.open(outputFile);

    int lineNumber = 0;
    string line;

    while(!inStream.eof()) {
        if(line == " ") {
        }
        else {
            lineNumber++;
            outStream << lineNumber << ": " << line << endl;
        }

        getline(inStream, line);
    }

    cout << lineNumber << " lines processed" << endl;

    inStream.close();
    outStream.close();
}

标签: c++

解决方案


我看到了一些错误:

  1. getInputOutputStreams()正在关闭它打开的流。

  2. 中的不正确return陈述getInputOutputStreams()

  3. numberFile()正在使用没有值的文件名字符串重新打开流。

  4. 使用while(!inStream.eof())不好

  5. 按照说明的要求,不要忽略空行。

试试这个

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void getInputOutputStreams(ifstream &inStream, ofstream &outStream);

void numberFile(ifstream &inStream, ofstream &outStream);

int main ()
{
    ifstream inStream;
    ofstream outStream;

    getInputOutputStreams(inStream, outStream);
    numberFile(inStream, outStream);

    return EXIT_SUCCESS;
}

void getInputOutputStreams(ifstream &inStream, ofstream &outStream)
{
    string inputFile;
    string outputFile;

    cout << "Enter the name of the input file:" << endl;
    cin >> inputFile;
    inStream.open(inputFile);

    while (inStream.fail()) {
        cout << "Invalid file name." << endl;
        cout << "Enter the name of an input file:" << endl;
        cin >> inputFile;
        inStream.open(inputFile);
    }

    cout << "Enter the name of the output file:" << endl;
    cin >> outputFile;
    outStream.open(outputFile);

    while (outStream.fail()) {
        cout << "Invalid file name." << endl;
        cout << "Enter the name of an output file:" << endl;
        cin >> outputFile;
        outStream.open(outputFile);
    }
}

void numberFile(ifstream &inStream, ofstream &outStream)
{
    int lineNumber = 0;
    string line;

    while (getline(inStream, line)) {
        if (line != "") {
            ++lineNumber;
            outStream << lineNumber << ": " << line << endl;
        }
    }

    cout << lineNumber << " lines processed" << endl;
}

推荐阅读