【发布时间】:2015-08-02 01:09:53
【问题描述】:
当我尝试使用while 循环将向量的内容写入新文件时,我相信我的错误在我的writeline 函数中。
//Read from txt file, write to new text file
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
void readline();
void sortline(vector<string>& sortthis);
void writeline(vector<string>& list);
int main()
{
readline();
system("pause");
return 0;
};
void readline()
{
string line;
vector<string> lines;
ifstream myfile("classes.txt");
if (myfile.is_open())
{
while (myfile.good())
{
getline(myfile, line);
lines.push_back(line);
};
myfile.close();
}
cout << "readline() has run" << endl;
sortline(lines);
writeline(lines);
};
void sortline(vector<string>& sortthis)
{
sort(sortthis.begin(), sortthis.end());
};
void writeline(vector<string>& list)
{
ofstream myfile2("new.txt");
if (myfile2.is_open())
{
int i = 0;
while(i !=list.size()-1)
{
myfile2 << list[i] << endl;
i++;
};
myfile2.close();
};
cout << "writeline() has run" << endl;
};
这是一个学期前的项目,我正在重新审视。我在我的 Mac 上编写了该程序,现在我正试图在我的带有 Visual Studio 的 Windows Comp 上运行它。我将描述我正在尝试做的事情,如果我提前选择的措辞很糟糕,我深表歉意。任何我放 * 的地方都是我不确定发生了什么的地方,但我会尝试一下。非常感谢对我的代码的任何解释!
我的 readline() 函数执行以下操作:创建一个名为 line 的字符串,创建一个名为 lines 的字符串类型的向量,**输入文件 classes.txt 并建立 myfile 作为它的对象,然后打开 myfile 进行写入,**使用 while 循环将 txt 中的行写入 myfile 对象,然后关闭 myfile,打印出一条语句让用户知道 readline() 已运行,然后将调用的向量传递给 sortline 函数,然后将行传递给 writeline 函数。
** sortline 接受一个字符串向量作为它的 arg,并为其分配对象 sortthis??然后我不确定会发生什么,但看起来我应用了排序算法,有人有什么想法吗?
最后我们得到了我的 writeline 函数,它接受一个字符串向量作为它的 arg 并为它们分配名称行(对吗?)然后我想为一个名为“new”的新文本文件建立一个新的输出文件流.txt" 对象名称为 myfile2,如果 myfile2 已打开,那么我想将字符串向量中的所有行(包含原始文本文件的内容)写入 myfile2,这会将它们写入 new.txt文件,然后关闭 myfile2,打印一条消息,说明该函数已运行,仅此而已。
【问题讨论】:
-
为什么你的函数体大括号用分号结束?
-
提供您的输入、输出(包括准确的错误消息)和预期输出。阅读this。
-
你的
writeline函数有一个名字很糟糕的参数:list。这很糟糕,因为“列表”这个词可能会与 std::list 发生冲突,而且因为它不是列表,而是向量。并且名称应该描述内容,而不是容器,所以“行”是一个更好的名称,保留它。也就是说,如果你的向量包含 3 个元素,当你调用list.size()时它将返回 3。因此循环退出条件应该是i !=list.size(),而不是i !=list.size()-1。除此之外,您应该按照 philipxy 的说明向我们提供更多详细信息。 -
有没有可能是空文件?
-
您的问题是什么? “我被卡住了”不是问题。
标签: c++ vector while-loop readfile writefile