【问题标题】:reading values into struct of arrays将值读入数组结构
【发布时间】:2018-02-09 21:42:48
【问题描述】:

我需要创建一个struct 数组,其中struct 是学生(数据类型为string FirstName、string LastName、int testScore 和char Grade)。我已经弄清楚了函数原型的逻辑,并且我已经学习了一些基本的文件 i/o。我希望结构数组中有 20 个学生,并且信息将从 .txt 文件中读取。这是我遇到麻烦的地方。这是我的基本代码。

#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std; 

struct studentType {
   string firstName;
   string lastName; 
   int testScore; 
   char Grade; 
};

int main()
{
   studentType students[20];

   int i;

   ifstream inputFile; 
   inputFile.open("testScores.txt"); 

   for (i = 0; i < 20; i++)
      inputFile >> students->testScore; 

   cout << "The test scores entered are: "; 

   for (i = 0; i < 20; i++)
      cout << " " << students->testScore; 

   return 0;
}

【问题讨论】:

  • 我还添加了一个参考文件“testScore.txt”。当我输出时,我从文本文件中获取第一个值 20 次。这是取 testScore.txt 的第一个值并存储到 studentType 的所有 testScore 成员中吗?
  • 您是否在调试器中逐步完成了此操作?这里的实际问题是什么?它在哪一行表现出意外?
  • 访问单个数组元素使用方括号[]

标签: c++ arrays file struct io


【解决方案1】:

当您访问数组时,您忘记索引数组中的元素。变化:

students->testScore

收件人:

students[i].testScore

在两个循环中。第一个版本只对第一个元素进行更改(因为它可以使用*students 访问),而第二个版本将索引添加到指针。

这只是使用std::vectorstd::array 的另一个很好的理由,因为如果您尝试像在此处对数组所做的那样取消引用它们,您会得到一个明显的错误。

附带说明,在 C++ 中,您应该在循环中声明循环变量inside。在 C99 之前,在外部声明它们是必要的,但在 C++ 之前不是。

【讨论】:

  • 哦,所以我只是将 .txt 的第一行的值添加到数组成员的第一个元素中,然后打印了 20 次... :P 哈哈谢谢你,虽然它有效。在旁注,c ++不使用花括号进行循环?我猜我应该只在 if 语句下声明循环变量?
  • @DrizztDo'Urden 是的,您的代码发生的事情是正确的。对于循环,我的意思是你应该用for(int i = 0; i &lt; x; ++i) {} 替换int i; for (i = 0; i &lt; x; ++i) {}。后者将变量的范围限制在一个小区域内。此外,如果您认为此答案有帮助,请考虑通过单击否决按钮下方的复选标记来接受它。
  • 啊所以把变量声明放在循环参数中。明白了。
猜你喜欢
  • 2016-06-11
  • 2013-12-11
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多