c++ - 从 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();
}
解决方案
我看到了一些错误:
getInputOutputStreams()
正在关闭它打开的流。中的不正确
return
陈述getInputOutputStreams()
。numberFile()
正在使用没有值的文件名字符串重新打开流。按照说明的要求,不要忽略空行。
试试这个
#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;
}
推荐阅读
- javascript - 如何使用 node js 在浏览器中创建 cookie
- javascript - 根据列表中对象的属性定义 Typescript 类型
- javascript - 如何在 Google Apps 脚本中记录对象?
- r - R图中的时间戳
- google-sheets - 等于锚定范围的单元格集仅返回该范围内的一个值....为什么?
- python - Python中的数字列表值识别
- python - 基于年龄相似度的散点图渐变色
- r - R根据向量在一行中打印一个值
- mysql - 使用 Windows 命令将 Dockerized 应用程序连接到 MySQL 返回错误
- java - Spring Boot 表单;隐藏路径值并显示占位符