使用数组时,可能导致此错误的原因是什么?解?

时间:2018-09-25 09:05:48

标签: c++ arrays file-io getline

这里有点新,来回尝试解决getline问题。我发现错误的根源是由于intext [18]。一旦删除阵列,所有错误就会消失。问题是我有19行数据需要检索,因此我不想键入每个决定将其全部放入数组的字符串,而是将其检索出来。我对c ++还是很陌生,这是迄今为止我唯一碰壁的时间。如果解决了这个问题,我会提前道歉。我整天都在搜寻,没有决心。

#include "pch.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
#include <array>

using namespace std;

int main()
{
    ifstream inFile;
    string intext[18];

    inFile.open("HW3_Data_W.txt");
    while (inFile.is_open()) {
        getline(inFile, intext);

        cout << "Data from the file:" << endl; 
        cout << "Item 1: " << intext << endl;

        break;

        inFile.close();
    }
}

2 个答案:

答案 0 :(得分:1)

您正在尝试将字符串值分配给字符串数组变量,您应该 getline(inFile, intext[i]); 其中i是行数。

您的数组也只能包含18行文本,因为您是用这种方式声明的。如果要读取正好有19行的文件,则应采用以下方式声明:

string intext[19];

如果您希望程序读取任意数量的行,则应使用std :: vector。

除此之外,您的while循环将仅重复一次。因为您无条件破坏它。我想你想做的是这样的:

inFile.open("HW3_Data_W.txt");
int i = 1;
while (inFile.is_open()) {
    getline(inFile, intext[i]);
    i = i + 1;
    cout << "Data from the file:" << endl; 
    cout << "Item 1: " << intext << endl;

    if(inFile.eof) continue;

    inFile.close();
}

此代码应该可以工作,但是不必要地复杂。 while条件检查文件是否打开,但是它将一直打开直到您将其关闭,并且您想在到达文件末尾时将其关闭。因此,您的while条件如下所示:     while(getline(inFile,intext [i])) 如果getline到达文件的最后一行,它将返回可转换为false的值,因此while会一直持续到您读取while文件。而且,您必须在一段时间之前检查文件是否打开,然后应在一段时间后关闭文件。像这样:

inFile.open("HW3_Data_W.txt");
int i = 0;

if(!inFile.is_open())
    return EXIT_FAILURE;

while(getline(inFile, intext[i])) {
    cout << "Item "<<i<<": " << intext[i] << endl;
}

inFile.close()

答案 1 :(得分:0)

此处有一些问题:

  1. 如果要读取19行,则字符串数组的大小至少应为19。

  2. 检查文件是否仅成功打开一次。无需检查while条件。

  3. 使用一个计数器读取intextwhile数组中的连续元素,该计数器在while循环之前被初始化为0。在while循环中递增此计数器。

  4. 要读取整个文件,请从break中删除while

  5. 请勿在片刻内关闭ifstream。在while循环之后执行此操作。