>我在 c++ 代码中收到"不允许不完整的类型"错误。
我的程序是从输入文件中读取学生数据,按字母顺序对姓名进行排序,并打印出排序后的姓名及其数据。数据包括身份证号码和考试成绩。
输入文件包括以下内容的重复: 1. 学生人数(16人( 2. 测试次数(即 6 次( 3. 学生姓名 4. 身份证号码 5 - 10.考试成绩
输出文件应包括以下内容的重复: 1. 名称 2. 身份证号码 3. 第一次考试成绩 4. 平均分 5. 字母等级
以下是我的结构行:
struct sGrade
{
string Name[20];
int IDnum[20];
float scores[5];
};
但就在这里,在主线中,"sGrade grade[size]"行中的"grade"会收到这种错误。
string s;
getline(inputf, s);
sizeS = stoi(s);
string t;
getline(inputf, t);
sizeT = stoi(t);
const int size = 16;
sGrade grade[size];
for (int i = 0; i < size; ++i)
{
getline(inputf, grade[i].Name);
getline(inputf, s);
grade[i].IDnum = stoi(s);
for (int j = 0; j < sizeT; ++j)
{
getline(inputf, grade[i].scores);
}
}
什么写得不完整?我必须以另一种方式接近它吗?请向我建议一些解决方案。
谢谢!
所以代码中存在很多问题,主要是围绕类型不兼容。
getline(inputf, grade[i].Name);
表示grade[i].Name
应该是一个字符串,但它被声明为 20 个字符串的数组。
grade[i].IDnum = stoi(s);
表示grade[i].IDnum
应该是一个int
但它被声明为 20 个整数的数组
getline(inputf, grade[i].scores)
表示grade[i].scores
应该是一个字符串,但它被声明为 5 个浮点数的数组。
你必须更仔细地考虑你声明的类型和你给事物命名。你真的希望sGrade
有 20 个名字和 20 个 ID 吗?或者(更有可能(你真的希望sGrade
有一个名字和一个 ID,然后声明一个 20 个 sGrade 的数组?
这是我认为代码应该是什么,但只有你才能确定
struct sGrade
{
string Name;
int IDnum;
float scores[5];
};
for (int i = 0; i < size; ++i)
{
getline(inputf, grade[i].Name);
getline(inputf, s);
grade[i].IDnum = stoi(s);
for (int j = 0; j < sizeT; ++j)
{
getline(inputf, s);
grade[i].scores[j] = stof(s);
}
}