这里有点新,来回尝试解决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();
}
}
答案 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)
此处有一些问题:
如果要读取19行,则字符串数组的大小至少应为19。
检查文件是否仅成功打开一次。无需检查while
条件。
使用一个计数器读取intext
中while
数组中的连续元素,该计数器在while循环之前被初始化为0。在while
循环中递增此计数器。
要读取整个文件,请从break
中删除while
。
请勿在片刻内关闭ifstream
。在while
循环之后执行此操作。