2015-02-05 115 views
0

这是结构结构数组打印不正确| C++

struct Student{ 
    char firstName[MAX_LEN + 1]; 
    char lastName[MAX_LEN + 1]; 
    float gpa; 
}; 

因此,让我说,StudentList1具有正确的数据。

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

现在的角色,当我尝试这样做,这样我只是得到一个一堆垃圾,我得到的第一个名字打印,但之后,一堆垃圾和姓氏太多,但只是垃圾之间。

+1

这听起来像你的字符串不是null终止。例如'[B] [o] [b] [0]' – 2015-02-05 19:47:56

+0

是否有另一个哨兵我可以选择不是null? – user3387140 2015-02-05 19:49:25

+0

StudentList2中的名字和姓氏最后需要'\ 0'。在每个while循环出来之后这样做。 – Kamehameha 2015-02-05 19:49:40

回答

0

你结束在复制时忘记终止零点。

由于结构是可复制,你可以做这样的:

while (count5 < countStruct1) 
{ 
    StudentList2[count5] = StudentList1[count5]; 
    count5++; 
} 

for (int i = 0; i < countStruct1; i++) 
{ 
    StudentList2[i] = StudentList1[i]; 
} 

这是略少出错。

+0

哇,我不能相信我忘记了,非常感谢你! – user3387140 2015-02-05 19:58:05

0

在您的代码:

while(StudentList1[count5].firstName[countfName] != '\0') 
{ 
    StudentList2[count5].firstName[countfName] = 
     StudentList1[count5].firstName[countfName]; 
    countfName++; 
} 

你有当它击中它停止“\ 0”,但你永远不重新编写“\ 0”到StudentList2

0

首先,你需要复制终止零:

StudentList2[count5].firstName[countfName] = '\0'; 
StudentList2[count5].lastName[countlName] = '\0'; 

,那么你需要重新设置计数器:在你最while环路​​前

countfName = countlName = 0; 

你应该这样做