程序在执行cout <<“ The End”之前结束;

时间:2018-09-26 15:24:08

标签: c++

当时正在另一个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个,一个将数据写入向量,一个显示向量的内容,这一轮程序只是呆了一会儿,直到结束而没有显示任何内容

1 个答案:

答案 0 :(得分:0)

如所指出的,您可以将<< << endl附加到cout <<“ The End”;语句,并应输出到控制台。 这样做的原因是通常end1会刷新流的内容。 这还会添加'\ n'字符;在这种情况下这无关紧要。 您总是可以将<< flush附加到语句中,并将流的内容输出到控制台。