读取struct类型的循环中的变量



我写的代码,我应该从循环中读取变量:

#include <iostream>
using namespace std;
#define NumOfStudents 100
#define NumOfCourses 15
struct Student{
  int stdnum, FieldCode, age;
  double average, res[NumOfCourses];
  char name[20];          //First and Last name length                                                                                                                          
};
int main(){
  struct Student students[NumOfStudents];
  int i;
  cout << "tNAME || STUDENT-NUMBER || FIELD-CODE || AGE";
  for(i=0; i<NumOfStudents; i++){
    cout << "nSTUDENT #" << i+1 << ": ";
    cin >> students[i].name[20] >> students[i].stdnum >> students[i].FieldCode >> students[i].age;                                                                            
    //    cin >> students[i].name[20];                                                                                                                                          
  }
}

编辑:输出为:

./st 
    NAME || STUDENT-NUMBER || FIELD-CODE || AGE
STUDENT #1: test
STUDENT #2: 
STUDENT #3: 
STUDENT #4:
.
.
.
STUDENT #100:

我只能输入第一个学生的名称,循环无法正常工作有什么问题?

cin >> students[i].name[20];

它不应该是20的数组。这意味着您输入的第一个字符存储在索引 20th位置,该位置不正确,并且可能导致不确定的行为,因为name数组仅从0索引到19

应该是cin >> students[i].name,它写入数组name

的基础地址

我认为你必须写

cin >> students[i].name

由于它是1D数组,因此不应将subscript用于获取输入。

cin >> students[i].name[20]

这部分是错误的。此命令从标准输入中读取一个字符,并将其存储在name中的第20个位置(即在数组name之后的字节中)。您想使用:

cin >> students[i].name >> ...

in line" cin>>学生[i] .name [20]。

您不能将名称[20]作为字符串的输入变量,因为它指向索引20的字符,在您的情况下,在索引0-19中也不存在作为char name [20]存储。

正确格式:

cin>>学生[i] .name;

将字符串或名称读为字符串。

首先,您需要使用无索引的students[i].name。您的语法试图插入其从终端读取的单个字符之外读取的单个字符,从而使指针弄乱(请注意,您应该确保输入被截断)。

>

第二,您应该为每个学生键入所有输入参数,而不能仅插入他们的名字。因此输入将是:

$ ./st
STUDENT #1: TestName 3456 1 15

如果这不是打算的行为,您可能想做多个cin >> variable司令。

您可以使其更清楚吗?在键入名字之后,您无法输入详细信息吗?还是循环在执行整个操作之前已退出?

在您的代码中,有一个问题,我猜

students[i].name[20]

这里只读一个字符。这应该用

在CIN中替换
students[i].name

另外,如果您无法在第一次迭代之后输入详细信息,请尝试给FFLUSH()或setBuf()清除输入缓冲区。

另外,如果您必须读取带有空格的字符串,请尝试使用cin.getline()或gets()。这些格式在网中可用。

谢谢

最新更新