我很难从文件中获取数据并将其输入到给定的结构和结构数组中,然后输出文件。 我们提供了一个包含96行的文件,如下所示:

尼尔·阿尔津
2.3 6.0 5.0 6.7 7.8 5.6 8.9 7.6
巴贝奇,查尔斯
2.3 5.6 6.5 7.6 8.7 7.8 5.4 4.5

该文件将继续供24个不同的人使用,然后以不同的分数重复(第二行)。 第一个数字(在这种情况下,两个人均为2.3)是难度等级。 接下来的6个数字是分数。

我们得到此数据是为了设置结构和数组以及我的代码:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <cmath>
using namespace std;
int main ()
{

  ifstream inFile;
  inFile.open("C://diveData.txt");

  // checking to see if file opens correctly
  if (!inFile)
  {
      cout << "Error opening the file!" << endl;
  }

  const int numRounds = 2;              // variable to hold the number of rounds
  const int numScores = 7;              // variable to hold the number of rounds
  const int numDivers = 24;             // variable to hold the number of divers
  typedef double DifficultyList[numRounds];   // 1D array for storing difficulty                of dives on each round 
  typedef double ScoreTable [numRounds] [numScores]; // 2D array of dive scores

// struct to store information for one diver
  struct DiverRecord
{
   string name;
   double totalScore;
  double diveTotal;
  DifficultyList diff;
  ScoreTable scores;
};

DiverRecord DiverList[numDivers];

// my attempt at printing out the contents of the file
  while (!EOF)
 {
    for (int x = 0; x < 25; x++)
    { 
       infile >> DiverList[x].name;
       inFile >> DiverList[x].totalScore;
       inFile >> DiverList[x].diveTotal;

       cout << DiverList.[x].name << endl;
       cout << DiverList.[x].totalScore << endl;
       cout << DiverList.[x].diveTotal << endl;
    }
  }

return 0;
}

===============>>#1 票数:0

几个问题:

  1. 确定ifstream是否打开,使用ifstream::is_open ;
  2. 确定是否遇到end of file ,请尝试下面的代码;
  3. 如果我理解正确,则您的输入文件格式应为:

    名称1,名称2
    难度评分1评分2 ...评分7

    从这个意义上说, totalScore不应从流中输入,而应进行计算。

  4. 一条记录有两个名称,因此记录结构的定义似乎很模糊。

这是修订版:

#include <string>
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;

struct DiverRecord
{
    string a, b;
    double totalScore;
    double difficulty;
    double scores[7];
};

int main ()
{

    ifstream inFile("C://diveData.txt");

    // checking to see if file opens correctly
    if (!inFile.is_open()) {
        cout << "Error opening the file!" << endl;
    }

    vector<DiverRecord> DiverList;

    DiverRecord record;
    char ch;
    while (inFile) {
        inFile >> record.a >> ch >> record.b >> record.difficulty;
        record.totalScore = 0;
        for (int i = 0; i < 7; ++i) {
            inFile >> record.scores[i];
            record.totalScore += record.scores[i];
        }

        DiverList.push_back(record);
    }

    // output your DiverList here.

    return 0;
}

===============>>#2 票数:0

首先>>运算符以第一个空格字符结束输入,因此当您读取名称时,您只会得到姓氏和逗号,它将尝试将名字放入totalScore中。 要获取全名,请执行以下操作。

  string temp;
  infile >> DiverList[x].name; 
  infile >> temp;
  DiverList[x].name + " ";
  DiverList[x].name + temp;

同样,在输出时,您不需要多余的“。”。

  cout << DiverList[x].name << endl;

等等应该可以正常工作。

===============>>#3 票数:0

正如我在较早的评论中所说的那样,我现在正集中精力于不使用结构和结构数组,而是尝试使用其他功能来从文件中读取数据。 我想以逻辑形式放置数据,例如:

人员姓名第一轮:难度分数第二轮:难度分数

但是我无法从文件访问特定元素。

我使用的代码是:

while(inFile)
{
   string name;
   getline(inFile, name);
   cout << name << endl;
}

这将按原样输出数据文件,但是当我尝试为难度和七个分数声明不同的变量时,它根本无法正确输出。

  ask by Jane translate from so

未解决问题?本站智能推荐:

2回复

从文件获取数据并将元素输出到表中

我得到一个包含24个人运动数据的数据文件。 该活动分为两轮。 文件的前48行提供第1轮的数据,后48行提供第2轮的数据。 该文件如下所示: 尼尔·阿兹林2.3 6.0 5.0 6.7 7.8 5.6 8.9 7.6 查尔斯·巴贝奇2.3 5.6 6.5 7.6 8.7 7.8
2回复

C ++-试图创建一个将文件中的数据读取到结构数组中的函数?

我看过几个类似的问题,但我似乎仍然无法接近理解这一点。 我对结构和数组有了基本的了解,但是对于真正创建一个将文件中的数据读取到结构数组中的函数我迷失了。 希望有人可以帮助我。 :( 我们必须: 编写一个函数InputPlayerData,该函数将从未知> len
2回复

将双精度数组输出到硬盘驱动器上的文件中

可能重复: 如何将双打数组输出到硬盘? 大家好, 对不起,您问了两次同样的问题,我是新手,仍然在学习如何正确使用本网站。 我想以文件(.txt .dat .bin等格式)将浮点/双精度数组存储到硬盘中。 我希望该文件是原始数组在RAM中的样子的镜像。 我还想知
2回复

如何在结构中存储二进制文件数据?

大家好, 我有一个如下所示的文件(Material.dat),它是二进制文件,我想从文件中读取数据并放入我使用过GetRecord()函数的结构中。 我怀疑是什么作为记录号传递到Get Record()函数? GetRecord(hFileMac,RECORD_NUMBER,
4回复

在VS 2010中创建文件/文件夹结构

我有点新手,正在寻求帮助。 我正在Visual Studios 2010中工作,并且拥有我正在处理的项目的解决方案。 具体来说,我正在从事Win32项目。 我不知道这是否重要。 我已经在要帮助组织源代码的目录中建立了文件/文件夹结构。 我想在项目中模仿,但不能。 组织好我的资
1回复

当在匿名结构中包装灵活数组时,MSVC结构布局会更改吗?

我正在使用godbolt查看以下结构的布局信息: 我希望两个结构Foo1和Foo2的布局都相同。 据我了解,匿名嵌套结构的任何字段都只是“折叠”到父结构中。 所以布局Foo2应转出相同的Foo1 。 但是,由MSVC 19.16生成并在使用标志/d1reportSingleCl
2回复

在C ++中将数组的所有元素输出到文件

我制作了一个小程序,询问用户要订购多少个项目(变量y),然后询问用户输入每个项目的名称以及每个项目的价格。 但是,此代码创建的所有txt文件仅打印第一项名称和第一项价格。 我该如何纠正? 我已经尝试为客户名称和商品名称\\价格创建不同的类。 我还尝试为项目创建其他数组。
2回复

从输入文件逐行输入并使用strtok()标记并输出到输出文件中

我想要做的是输入一个文件LINE BY LINE并标记并输出到输出文件。我能够做的是输入文件中的第一行但我的问题是我无法输入下一行要标记化的行,以便它可以保存为输出文件中的第二行,这是我到目前为止输入文件中的第一行所能做的。
1回复

查找并替换文本文件中的字符串,然后输出到另一个文件

我正在尝试编写一个程序,该程序可以打开文本文件,找到某个字符串,然后用另一个字符串替换它,然后将更改后的文本写入输出文件。 到目前为止,这就是我编写的代码。 它工作正常,除了输出文件缺少空格和换行符。 我需要保留所有空格和换行符。 我该怎么做? 更新: 我按照您的建
2回复

共享内存中的STL结构

我需要在我的结构内部创建一个像结构一样的队列,用作共享内存。 我怎样才能做到这一点 ? 我的编译器是Visual C ++。