请教C++高手!为什么输入0无法结束输入……财富不多!真心求解答

#include <iostream>
using namespace std;
struct student
{
long num;
double score;
student *next;
};
typedef student* SPtr;
SPtr creat(void)
{
student *head,*p1,*p2;
int n=0;
p1 = p2 = new student;
cin >> p1->num >> p1->score;
head = NULL;
while(p1->num != 0)
{
n = n + 1;
if(n == 1)
head = p1;
else
p2->next = p1;
p2=p1;
p1=new student;
cin >> p1->num >> p1->score;
}
p2->next = NULL;
return(head);
}
int main()
{
student *pt;
pt = creat();
while(pt->next != NULL)
{
cout << "num: " << pt->num << " score: " << pt->score << endl;
pt = pt->next;
}
cout << "num: " << pt->num << " score: " << pt->score << endl;
system("pause");
return 0;
}

已验证,程序没有问题。
退出第一个while循环的条件是:你在输入的一组数据中,第一个数据为0;
例:
输入: 1 2 回车
3 4 回车
0 1 回车

结果:
num:1 score 2
num::3 score 4
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-28
验证过了,当只输入0 n时会出错,因为发生内存越界访问
#include <iostream>
using namespace std;
struct student
{
long num;
double score;
student *next;
};
typedef student* SPtr;
SPtr creat(void)
{
student *head,*p1,*p2;
int n=0;
p1 = p2 = new student;
cin >> p1->num >> p1->score;
head = NULL; //如果开始就输入0 那么head是一个空值NULL
while(p1->num != 0)
{
n = n + 1;
if(n == 1)
head = p1;
else
p2->next = p1;
p2=p1;
p1=new student;
cin >> p1->num >> p1->score;
}
p2->next = NULL;
return(head);
}
int main()
{
student *pt;
pt = creat(); //把NULL给pt的话,pt,也是NULL
while(pt->next != NULL) //也出现问题pt为NULL,pt->next不知道指向哪里
{
cout << "num: " << pt->num << " score: " << pt->score << endl;
pt = pt->next;
}
cout << "num: " << pt->num << " score: " << pt->score << endl; //那么这里就会出错
system("pause");
return 0;
}
第2个回答  2012-11-28
试了运行了一下你 的程序,可以运行,输入0之后再输入一个数在按Enter;
因为你是 cin >> p1->num >> p1->score;

下面是我运行时输入及输出的结果

10 12
14 22
0 1
num: 10 score: 12
num: 14 score: 22
请按任意键继续. . .
第3个回答  2012-11-28
没看出代码有什么问题,只有一点,你输入0时不会就只输入了一个光0吧,你输入0 0看还有没有问题
相似回答
大家正在搜