这是结构
struct Student{
char firstName[MAX_LEN + 1];
char lastName[MAX_LEN + 1];
float gpa;
};
所以我要说StudentList1有正确的数据。
计算Struct1是输入的名称数。
Student StudentList1[10];
int count5 = 0, countfName = 0, countlName = 0;
while(count5 < countStruct1)
{
while(StudentList1[count5].firstName[countfName] != '\0')
{
StudentList2[count5].firstName[countfName] =
StudentList1[count5].firstName[countfName];
countfName++;
}
while(StudentList1[count5].lastName[countlName] != '\0')
{
StudentList2[count5].lastName[countlName] =
StudentList1[count5].lastName[countlName];
countlName++;
}
StudentList2[count5].gpa = StudentList1[count5].gpa;
count5++;
}
现在出于某种原因,当我尝试使用此代码时,不使用数组作为姓氏和名字的字符
while(count6 < count5)
{
cout << "Name: " << StudentList2[count6].firstName << " " << StudentList2[count6].lastName << "\n";
count6++;
}
现在,当我尝试这样做时,我只是得到了一堆垃圾,我得到了第一个名字,但之后是一大堆垃圾和姓氏,但只是垃圾。
答案 0 :(得分:0)
在您的代码中:
while(StudentList1[count5].firstName[countfName] != '\0')
{
StudentList2[count5].firstName[countfName] =
StudentList1[count5].firstName[countfName];
countfName++;
}
当它击中&#39; \ 0&#39;时你就停止了,但你永远不会重写那个&#39; \ 0&#39;到StudentList2
答案 1 :(得分:0)
您在复制时忘记了终止零。
由于结构是可复制的,你可以这样做:
while (count5 < countStruct1)
{
StudentList2[count5] = StudentList1[count5];
count5++;
}
或
for (int i = 0; i < countStruct1; i++)
{
StudentList2[i] = StudentList1[i];
}
稍微不那么容易出错。
答案 2 :(得分:0)
首先,您需要复制终止零:
StudentList2[count5].firstName[countfName] = '\0';
StudentList2[count5].lastName[countlName] = '\0';
然后你需要重置你的计数器:
countfName = countlName = 0;
您应该在最外层count5++
循环中的while
之前执行此操作