标题:哪错了
只看楼主
银魂飞雪
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-10-23
 问题点数:0 回复次数:6 
哪错了

#include <iostream>
#include <string>
using namespace std;
class person
{
public:
string name;
person *Rlink;
// person *Llink;
};
void main()
{
person *first=NULL;
person *last=NULL;
person *current=NULL;

person *newnode=NULL;

newnode=new person;
newnode->name="a";
newnode->Rlink=NULL;
first=last=newnode;
for(int i=0;i<5;i++)
{
newnode=new person;
newnode->name="a";
newnode->Rlink=NULL;

last->Rlink=newnode;
last=newnode;
}
for(current=first;current->name!="c"&&current!=NULL; //注意这一行,这一行的"C"改成"a"就错了,为什么
current=current->Rlink);
if(current==NULL)
{
cout<<"没有要找的数";
}
else
{
cout<<current->name;
}
}

搜索更多相关主题的帖子: current include person public 
2006-12-09 22:36
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 
[CODE]#include <iostream>
#include <string>
using namespace std;

class person
{
public:
string name;
person * Rlink;
};

int main()
{
person * first = NULL;
person * last = NULL;
person * current = NULL;

person * newnode = NULL;

newnode = new person;
newnode->name = "a";
newnode->Rlink = NULL;
first = last = newnode;

for(int i=0;i<5;i++)
{
newnode=new person;
newnode->name="a";
newnode->Rlink=NULL;

last->Rlink=newnode;
last=newnode;
}

for(current=first; current->name != "a" && current!=NULL;
current=current->Rlink)
;

if(current==NULL)
{
cout<<"not found";
}
else
{
cout<<current->name;
}

// to delete the space
current = first;
while(current)
{
person * temp = current->Rlink;
delete current;
current = temp;
}
return 0;
}[/CODE]

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-12-10 00:22
一二三四五
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:856
专家分:0
注 册:2006-11-13
得分:0 

以后要注意细节


hey,di va la
2006-12-10 09:27
银魂飞雪
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-10-23
得分:0 

先谢了,
不过好像要查找NAME为C的还是会出错啊
我知道一种方法,改成如下就行了,但是为什么呢?
#include <iostream>
#include <string>
using namespace std;

class person
{
public:
string name;
person * Rlink;
};

int main()
{
person * first = NULL;
person * last = NULL;
person * current = NULL;

person * newnode = NULL;

newnode = new person;
newnode->name = "a";
newnode->Rlink = NULL;
first = last = newnode;

for(int i=0;i<5;i++)
{
newnode=new person;
newnode->name="a";
newnode->Rlink=NULL;

last->Rlink=newnode;
last=newnode;
}

bool same=false; //改的这里
for(current=first; !same && current!=NULL;
current=current->Rlink)
{
if(current->name=="c")
same=true;
}

if(current==NULL)
{
cout<<"not found";
}
else
{
cout<<current->name;
}
}

2006-12-10 19:52
zhubenben
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-28
得分:0 

我没有验证 但是我觉得你这个程序由很大的问题
for (current = first; current->name != "a" && current != NULL;
current = current->Rlink);

当current指向最后一个元素的时候current!=NUll
然后执行current = current->Rlink之后 current = NULL;
可是current->name根本不存在,
这就导致了错误的出现,我觉得应该把
for (current = first; current->name != "a" && current != NULL;
current = current->Rlink);
改成
for (current = first; current != NULL && current->name != "a";
current = current->Rlink);
根据 && 的规则当 && 前的条件为flase && 后面的不考虑
这样就不会有问题了
我没有验证不知道是不是这样,希望大家指出错误
而且你的程序写的很"难看" 呵呵 希望你以后能注意下

[此贴子已经被作者于2006-12-10 21:03:13编辑过]

2006-12-10 21:01
银魂飞雪
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-10-23
得分:0 
这个答案很好啊
2006-12-11 14:22
银魂飞雪
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2006-10-23
得分:0 
这个只是为了说明问题而写的一个验证程序
所以太丑了,不好意思
2006-12-11 14:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-108458-1-1.html




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

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