我找到了一种将数据读入我的数组结构的方法,但我无法控制它读取了多少。它将读取输入文件中的所有 14 个条目,但在读取完 14 个条目后,它会继续读取几行然后停止。但是,如果我将读取数据的代码放在任何循环中,无论是 while 还是 for,它都会开始打印大量数字,而不是文件中包含的内容。有谁知道为什么会这样?有办法解决吗
输入文件如下所示(不包括点): 文件中有14组数据。因此,如下所示,第 1 组将包括佐治亚州 76.4 10,然后是北卡罗来纳州 95.5 20,依此类推直到 14 组。
输入文件中的数据如下所示:
georgia
76.4 10
north carolina
95.5 20
and so on.
需要将数据打印到屏幕上,如:
georgia 76.4 10
north carolina 95.5 20
etc.
问题出在我的代码中,我尝试读入输入文件但失败了。
#include <iostream>
#include <fstream>
#include <cstdlib>
struct ATdata
{
string state;
double miles;
int shelters;
};
int readData( ifstream& input, struct ATdata data[] );
int main()
{
ifstream input;
char filename[256];
ATdata data[14];
int i;
cout << "Enter input file name: ";
cin >> filename;
input.open( filename );
if ( input.fail() )
{
cout << "Input file does not exist." << endl;
exit(1);
}
readData( input, data );
cout << i << endl;
return(0);
}
int readData( ifstream& input, struct ATdata data[] )
{
int i, j;
getline( input, data[i].state, '\t' );
input.ignore( 14, '\n' );
input >> data[i].miles;
input.ignore( 1, ' ' );
input >> data[i].shelters;
for ( j = 0; j < 14; j++ )
{
cout << data[j].state << data[j].miles << data[j].shelters << endl;
}
}
对于所有试图尽可能清晰的信息,以免看起来更愚蠢,我深表歉意。 感谢您度过愉快的一天。
最佳答案
getline()
接受一个 ostream&
和一个 string
。由于您的类型不是 string
,因此它会给您一个错误。我建议您像这样阅读您的输入:
for (int i = 0; i < 14; i++ )
{
input >> data[i].state >> data[i].miles >> data[i].shelters;
}
顺便说一句,您的state
是一个char
,即1 个字符。将其设为 std::string
。
关于C++将数据读入结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23255654/