我有一个看起来像这样的文本文件:
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的值在每次迭代中都会发生变化? 我们在哪里指定程序应该读取的文本文件的哪一行或哪一行?
答案 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;
}
}