结构阵列无法正确打印| C ++

时间:2015-02-05 19:45:16

标签: arrays char structure

这是结构

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++;
    }

现在,当我尝试这样做时,我只是得到了一堆垃圾,我得到了第一个名字,但之后是一大堆垃圾和姓氏,但只是垃圾。

3 个答案:

答案 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之前执行此操作