我正在尝试将文件的内容加载到数组后打印出来。我正在打印第一个条目,但其余的都输出为0.我觉得我需要在某个地方放置另一个循环,但我不确定它最适合的地方。
这是我的代码:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
using namespace std;
struct plane //strcutre of plane data to use
{
string name;
string direction;
int id;
int coordX;
int coordY;
int height;
int speed;
};
void populate (plane planeArray[], int n )
{
string name, direction;
int id, coordX, coordY, height, speed, i, c;
ifstream infile; //declare input file stream
infile.open("plane_data.txt"); //opens file
if (!infile)
{
cout << "File cannot be reached"; //checks for invalid file path
}
for ( int i = 0; i < 4; i++ )
{
getline(infile, planeArray[i].name);
infile >> planeArray[i].id;
infile >> planeArray[i].coordX;
infile >> planeArray[i].coordY;
infile >> planeArray[i].height;
infile >> planeArray[i].speed;
getline(infile, planeArray[i].direction);
}
infile.close();
}
void text_display( plane planeArray[5])
{
for ( int i = 0; i < 4; i++ )
{
cout << planeArray[i].name << endl;
cout << planeArray[i].direction << endl;;
cout << planeArray[i].id << endl;;
cout << planeArray[i].coordX << endl;;
cout << planeArray[i].coordY << endl;;
cout << planeArray[i].height << endl;;
cout << planeArray[i].speed << endl;;
cout << endl;
}
}
int main()
{
const int N = 5;
plane planeArray[N] = {};
populate( planeArray, N );
text_display( planeArray);
}
以下是文件中包含的内容:
Airbus A380
123456
123 300
25000
400
north
Boeing-747
140
234567
30000
450
north west
Cessna-404-Titan
345678
145
29000
400
south
Sukhoi-Superjet-100
456789
120
28000
300
south west
Lockheed-Jetstar
567890
270
20000
500
east
这是我运行代码时得到的输出:
Airbus A380
123456
123
300
25000
400
north
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Process returned 0 (0x0) execution time : 0.090 s
Press any key to continue.
非常感谢任何帮助! (另外,如果你能告诉我如何摆脱打印数据中第一个和最后一个条目周围的空白行,那将是一个不错的奖励。)
干杯
答案 0 :(得分:1)
空中客车的x坐标中有一个空格。这样
infile >> planeArray[i].coordX;
infile >> planeArray[i].coordY;
从同一行读取两次(123 300) 所以你与你正在阅读的文件的结构不同步。
您有两种选择:
答案 1 :(得分:1)
文件中的块之间有一个空白行,您可以忽略它。
读取第一个块并移动到第二个块后,文件位置仍然位于空行的前面。然后,您对第二个块的读取与实际数据相差一行。
这意味着您正在读取planeArray[1].name
的空行,然后您尝试从行Boeing-747
读取planeArray[1].id
,这将失败,因为格式与{{int
不匹配1}}。此时,流进入错误状态,之后不再读取任何内容。
这可以通过在循环结束时向虚拟字符串添加额外的getline
来解决。
您的文件也缺少除第一个之外的所有块的第二个坐标,这将导致类似的问题。