我写了一段代码,我应该从for循环中读取变量:
#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:
我可以输入第一个学生的名字,循环不能正常工作 有什么问题?
答案 0 :(得分:7)
cin >> students[i].name[20];
它不应该是20
的数组。这意味着您输入的第一个字符存储在索引20th
位置,该位置不正确,并且可能导致未定义的行为,因为name
数组仅从0
索引到19
。
而应该是cin >> students[i].name
,它写入数组name
答案 1 :(得分:5)
我认为你必须写
cin >> students[i].name
由于它是一维数组,因此不应使用subscript
来获取输入。
答案 2 :(得分:1)
cin >> students[i].name[20]
这部分是错误的。此命令从标准输入读取一个字符,并将其存储在name
中的第20个位置(即在数组name
之后的字节中)。你想使用:
cin >> students[i].name >> ...
答案 3 :(得分:1)
符合“cin&gt;&gt; students [i] .name [20]”。
你不能使用name [20]作为字符串的输入变量,因为它指向索引为20的字符,在你的情况下也不存在,因为char name [20]存储在索引0-19中。
格式正确:
CIN&GT;&GT;学生[I]。名称;
读取字符串或名称作为字符串。
答案 4 :(得分:1)
首先,您需要在没有索引的情况下使用students[i].name
。您的语法会尝试将它从终端读取的单个字符插入char数组的末尾,从而弄乱指针(请注意,您应该确保输入被截断)。
其次,您应该为每个学生输入所有输入参数,不能只是插入他们的名字。所以输入将是:
$ ./st
STUDENT #1: TestName 3456 1 15
如果这不是预期的行为,您可能想要做多个cin >> variable
州同事。
答案 5 :(得分:1)
你能说得更清楚吗?输入第一个名字后,您是否无法输入详细信息?或者是在执行整个操作之前退出循环?
在你的代码中,有一个问题,我想
students[i].name[20]
这里只读取一个字符。这应该用cin替换
students[i].name
此外,如果您在第一次迭代后无法输入详细信息,请尝试使用fflush()或setbuf()来清除输入缓冲区。
此外,如果您必须读取带空格的字符串,请尝试使用cin.getline()或gets()。这些格式可在网上找到。
谢谢