我写的代码,我应该从循环中读取变量:
#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()。这些格式在网中可用。
谢谢