c++ - 从 cin 读入结构数组时终止输入

标签 c++ arrays struct cin

我是 C++ 的初学者。我正在尝试编写一个简单的程序来创建 student_info 的记录。我创建了一个 structs 数组,其中包含成员变量名称和家庭作业成绩 vector 。我希望从终端输入 cin 读取到这个 structs 数组。请在下面找到我尝试这样做的尝试。我感到困惑的是如何在运行程序时终止/退出程序中的读取循环。我需要继续阅读姓名和一堆形成单个记录的家庭作业成绩。如果我删除 is.clear() 然后它只会得到一条记录,当我输入下一个学生的名字时程序退出。

如果有任何建议,我将不胜感激。

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

struct student_info{
  string name;
  vector<double> hw_grades;
};

istream& read_single_record (istream& is, student_info& s){
  is>>s.name;
  double x;
  while(is>>x)
  {
     s.hw_grades.push_back(x);
  }
  is.clear();
  return is;}

int main() {
  //read data into an array of student info
  vector<student_info> vec_st_info;
  student_info x;
  while(read_single_record(cin,x))
  {
    vec_st_info.push_back(x);
  }             
  return 0;
  }

程序的示例输入将是

John
88
98
89
67
Sam
78
90
Tom
89
90
76

名称后跟一系列家庭作业成绩,每个成绩都用“返回”键输入。家庭作业的分数也不固定。

最佳答案

当您无法读取 name 时,应该通过返回来解决这个问题:

istream& read_single_record (istream& is, student_info& s)
{
  if( !(is>>s.name) ) return is;
  double x;
  while( is>>x )
  {
     s.hw_grades.push_back(x);
  }
  is.clear();
  return is;
}

修复挂起的原因是,当您未能读取字符串时,流仍处于错误状态。以前,您总是在返回之前清除状态。

关于c++ - 从 cin 读入结构数组时终止输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32323286/

相关文章:

c - 读取文本的第一行并将其转换为 int,但返回另一个值 [C]

python - 从给定的 numpy 数组创建 block 对角 numpy 数组

Ruby - 结构和命名参数继承

c - 动态调整大小的结构体 - 艰难地学习 C

尝试从结构打印时出现编译器错误

android - 仅在Android上查询时出现SQL逻辑错误

javascript - JavaScript 数组中的空项和未定义项有什么区别?

c++ - 使用来自可变参数模板类的特定参数调用函数

c++ - 使用 ifstream 处理制表符并将任意数量的值读入 vector

c++ - 将 vector 拆分为两个较小数组的最佳方法?