使用ifstream从文件中读取数据并将其存储在数组中

时间:2014-12-09 14:03:16

标签: c++ arrays fstream ifstream

我有一个看起来像这样的文本文件:

Mercury     0.39    0
Venus       0.72    0
Earth       1.0 1
Mars        1.52    2
Jupiter     5.2 67
Saturn      9.53    63
Uranus      19.2    27
Neptun      30.1    14

有一个程序从该文件中读取数据,以便将其存储在数组中,它看起来像:

/********************************************************************************
 *
 * Planets.cpp: program reads data from the file planets.dat and prints the 
 *              information. Objects of classPlanet are used to store and print
 *              the data
 *
 * Copyright (C) October 2014               Stefan Harfst (University Oldenburg)
 * This program is made freely available with the understanding that every copy
 * of this file must include this header and that it comes without any WITHOUT
 * ANY WARRANTY.
 ********************************************************************************/
#include <iostream>
#include <fstream>
#include <string>
#include "classPlanet.h"

using namespace std;

int main() {
  Planet planets[8];
  ifstream pdata;

  pdata.open("planets.dat");

  for (int i=0; i<8; ++i) {
    string name;
    double d;
    int    n;
    pdata >> name >> d >> n;
    planets[i] = Planet(name, d, n);
  }

  for (int i=0; i<8; ++i) 
    planets[i].print();

}

如果你帮我理解这条线,我将不胜感激。数据&gt;&gt;名称&gt;&gt; d&gt;&gt; N; &#34 ;.为什么name,d和n的值在每次迭代中都会发生变化? 我们在哪里指定程序应该读取的文本文件的哪一行或哪一行?

1 个答案:

答案 0 :(得分:0)

data >> name >> d >> n首先跳过空格,然后读取一个字符串,然后跳过空格,然后读取一个double,然后跳过空格,然后读取一个int。 它与

完全相同
data >> name;
data >> d;
data >> n;

您没有指定一行或一列 - 该流具有一个跟踪的“当前位置”,并从该点读取。
实际上,没有办法指定从流中读取哪个列或行 - 您需要编写自己的代码,将输入分解为行和列。

如果您想获取特定列的内容,最简单的方法是不使用您不感兴趣的列的内容

int main()
{
    ifstream data("planets.dat");
    // Print all the planets' names
    while (data)
    {
        std::string name;
        double d;
        int n;
        data >> name >> d >> n;
        std::cout << name << std::endl;
    }
}