当时正在另一个cpp中测试此功能,但是它没有用,所以我将其放在新的cpp中进行测试,下面是代码:
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
typedef vector<string> vstring;
vector<vstring> data;
void createDisplay();
bool checkFile(); //checks if the txt file is empty or not, if yes display "no data"
int main()
{
checkFile();
createDisplay();
cout << "The End"; //this doesn't shows up
return 0;
}
void createDisplay() //writes data from a txt file to 2d vector
{ //(12 rows fixated, total data are all multiples of 12)
//and display all of its contents
int i, j, k ,l;
ifstream file;
file.open("data.txt");
while (!file.eof()) {
for (int i = 0; i < 3; i++){
vector<string> tmpVec;
string tmpString;
for (int j = 0; j < 12; j++){
getline(file, tmpString);
tmpVec.push_back(tmpString);
}
data.push_back(tmpVec);
}
}
string line, tempStr;
while (getline(file, line))
{
data.push_back(vstring());
istringstream strm(line);
while (strm >> tempStr)
data.back().push_back(tempStr);
}
string list[12] = //list of items, tried splitting into two functions from here
{
"[1] A: ",
"[2] B: ",
"[3] C: ",
"[4] D: ",
"[5] E: ",
"[6] F: ",
"[7] G: ",
"[8] H: ",
"[9] I: ",
"[10] J: ",
"[11] K: ",
"[12] L: "
};
if (checkFile() == true)
{
for(k=0; k<12; k++)
{
cout << list[k] << "No data" << endl;
}
}
else
{
for(k=0;k<data[l].size();k++)
{
cout << list[k] ;
for(l=0;l<data.size();l++)
{
cout << left << setw(25) << data[l][k] ;
}
cout <<endl;
}
}
}
bool checkFile() //checks if the txt file is empty or not, if yes display "no data"
{
ifstream file;
file.open("data.txt");
if (file.peek() == ifstream::traits_type::eof())
return true;
else
return false;
}
测试了一些情况,
情况1:txt文件中有数据,数据已成功写入矢量,所有数据均显示良好,然后程序出现一阵眩晕,“ The End”不出现,程序结束。
情况2:txt文件中没有数据,checkFile()起作用并显示“无数据”,出现“结束”。
我尝试将createDisplay()分成2个,一个将数据写入向量,一个显示向量的内容,这一轮程序只是呆了一会儿,直到结束而没有显示任何内容
答案 0 :(得分:0)
如所指出的,您可以将<< << endl附加到cout <<“ The End”;语句,并应输出到控制台。 这样做的原因是通常end1会刷新流的内容。 这还会添加'\ n'字符;在这种情况下这无关紧要。 您总是可以将<< flush附加到语句中,并将流的内容输出到控制台。