| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 432 人关注过本帖
标题:[求助] 大家来看看~我的程序出了什么问题呀~`
只看楼主 加入收藏
luyihuaa5201
Rank: 2
等 级:论坛游民
帖 子:254
专家分:10
注 册:2007-3-25
结帖率:66.67%
收藏
 问题点数:0 回复次数:4 
[求助] 大家来看看~我的程序出了什么问题呀~`

循环两次就是死循环了

#include <stdio.h>

struct Student
{
int nId ;
char cName[50] ;
int nCpp ;
Student *pNext ;
};

Student *pHeader = NULL ;

void main()
{
Student *pNew = new Student ;


int nKey = 0 ;
while(0 == nKey)
{

printf("输入学生的信息:");
scanf("%d %s %d",&pNew->nId,pNew->cName,&pNew->nCpp);

pNew->pNext = NULL ;

if(pHeader == NULL)
{
pHeader = pNew ;
}
else
{
Student *pNode = pHeader ;
for( ;pNode->pNext != NULL ; pNode = pNode->pNext);
pNode->pNext = pNew ;
}

printf("请继续输:");
scanf("%d",&nKey);
}
//显示
Student *pNode = pHeader ;
printf("Id\tName\tCpp\n");
for ( ;pNode != NULL ; pNode = pNode->pNext)
{
printf("%d\t%s\t%d\n",pNode->nId,pNode->cName,pNode->nCpp);
}
pNode = pHeader ;

//释放空间

Student *pTemp = NULL ;
for(pNode=pHeader ; pNode != NULL ; pNode = pTemp )
{
pTemp = pNode->pNext ;
delete pNode ;
}
pHeader = NULL ;


}

搜索更多相关主题的帖子: include 信息 
2007-04-13 19:47
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

貌似没有给结点分配空间.


倚天照海花无数,流水高山心自知。
2007-04-13 20:19
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 
我觉得“while(0 == nKey)”有问题吧。
看你的思路应该是没有问题的。
具体的我也得研究一下!
呵呵。。。


~~我的明天我知道~~
2007-04-13 20:23
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

这个程序有严重的问题.
第一:
这个程序只为一个结点申请了空间,程序的每次输入数据都放在这个结点上,
Student *pNew = new Student ;
第二:
else
{
Student *pNode = pHeader ;
for( ;pNode->pNext != NULL ; pNode = pNode->pNext);
pNode->pNext = pNew ;
}
由于Student *pNode = pHeader ;相当于把Student *pNode =pNew;
pNode->pNext = pNew ;相当于pNew->next=pNew;
这些语句会使用得自己指向自己.
第三:
for ( ;pNode != NULL ; pNode = pNode->pNext)
{
printf("%d\t%s\t%d\n",pNode->nId,pNode->cName,pNode->nCpp);
}
这是一个无限循环.
第4:
for(pNode=pHeader ; pNode != NULL ; pNode = pTemp )
{
pTemp = pNode->pNext ;
delete pNode ;
}
这个循环也是一个无限循环,
运行的时侯会无法执行下去,因第一次delete把pNew申请的空间释放了,
这时pNew已经没有指向地址空间了.
再去用delete释放已经释放了的空间,结果就是运行不了.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-04-13 20:53
luyihuaa5201
Rank: 2
等 级:论坛游民
帖 子:254
专家分:10
注 册:2007-3-25
收藏
得分:0 

我犹豫发帖以后机子坏了,所以没有再讨论这个问题了,今天又有时间再研究了
我上次报错的原因是 我没有循环一次再在堆里申请一个空间,就造成了上叙错误
正确的代码是


#include <stdio.h>

struct Student
{
int nId ;
char cName[50] ;
int nCpp ;
Student *pNext ;
};

Student *pHeader = NULL ;

void main()
{



int nKey = 0 ;
while(0 == nKey)
{
Student *pNew = new Student ;

printf("输入学生的信息:");
scanf("%d %s %d",&pNew->nId,pNew->cName,&pNew->nCpp);

pNew->pNext = NULL ;

if(pHeader == NULL)
{
pHeader = pNew ;
}
else
{
Student *pNode = pHeader ;
for( ;pNode->pNext != NULL ; pNode = pNode->pNext);
pNode->pNext = pNew ;
}

printf("请继续输(0是继续,非0 是退出):");
scanf("%d",&nKey);
}
//显示
Student *pNode = pHeader ;
printf("Id\tName\tCpp\n");
for ( ;pNode != NULL ; pNode = pNode->pNext)
{
printf("%d\t%s\t%d\n",pNode->nId,pNode->cName,pNode->nCpp);
}
pNode = pHeader ;

//释放空间

Student *pTemp = NULL ;
for(pNode=pHeader ; pNode != NULL ; pNode = pTemp )
{
pTemp = pNode->pNext ;
delete pNode ;
}
pHeader = NULL ;


}

2007-04-25 21:34
快速回复:[求助] 大家来看看~我的程序出了什么问题呀~`
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028177 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved