C++将数据读入结构数组

标签 c++ arrays data-structures

我找到了一种将数据读入我的数组结构的方法,但我无法控制它读取了多少。它将读取输入文件中的所有 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/

相关文章:

c++ - 查找后缀到前缀表达式

c++ - 为什么指针/变量内存地址不变?

c++ - 我们如何更改此函数以支持多个参数?

c++ - 我不应该在线程过程中使用 _endthreadex() 来展开堆栈吗?

c++ - 数组的地址是否等于 C++ 中第一个元素的地址?

arrays - iOS 如何找到浮点/整数值数组的值之间的最小差异

javascript - 如何删除两个数组上的相同值?

objective-c - 从 imp 调用 Objective-C 方法

xml - JSON 和 XML 有可比性吗?

c++ - 从基类更改为派生类的最佳方法