首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为什么不能查找,劳驾各位大神帮小弟我看看哪出错了

2012-04-16 
为什么不能查找,劳驾各位大神帮我看看哪出错了#include stdio.h#include string.h#define Max 10typed

为什么不能查找,劳驾各位大神帮我看看哪出错了
#include <stdio.h>
#include <string.h>
#define Max 10
typedef struct stu
{
int Number;
char Name[Max];
struct stu *Next;
}student;

void print(student *Head)
{
student *Pointer;
Pointer = Head;
while(Pointer != NULL)
{
printf("-Input Data-\n");
printf("Data Number :%d\n",Pointer->Number);
printf("Data Name: %s\n",Pointer->Name);
Pointer = Pointer->Next;
}
}

int query(student *Head,char * qname)
{
student *p;//结点声明
p = Head;//p指针设为首节点

while (p != NULL);//如果链表结束,则循环结束
{
if( !strcmp(p->Name,qname))//判断节点中的数据编号是否与待查职匹配
{
printf("The student Number:%d\n",p->Number); //找到了数据则打印相关数据项
printf("The student Name :%s\n",p->Name);

return 1;//找到数据——一种情况:返回一个值,与主函数中的if语句相呼应是程序更加健壮
}

p = p->Next;//继续往下循环——链表的循环特征,p指针指向下一个结点
}
return 0;//没有找到待查数据——另一种情况,函数值返回值为0
}


student *create()
{
student *Head;

int DataNum;
char DataName[Max];

student *New;
student *Pointer;

int i;

Head = (student*)malloc(sizeof(student));

if(Head == NULL)
printf("Memory allocate failure!! \n");

else
{
DataNum = 1;
printf("Please input the data name (Input 0 to Exit):");
scanf("%s",DataName);
Head->Number = DataNum;
for(i = 0; i<=Max; i++)
Head->Name[i] = DataName[i];

Head->Next = NULL;
Pointer = Head;

while(1)
{
DataNum++;
New = (student*)malloc(sizeof(student));
printf("Please input the data name (Input 0 to Exit):");
scanf("%s",DataName);
if(DataName[0] == '0')
break;
New->Number = DataNum;
for(i = 0; i<=Max; i++)
New->Name[i] = DataName[i];
New->Next = NULL;

Pointer->Next = New;
Pointer = New;
}

}
return Head;
}

main()
{
student *H; //结点声明
  char qname[Max]; //定义一个字符型数组,用于让用户输入需要查找的数据

H = create(); //调用链表创建函数创建链表

if(H != NULL ) //调用链表输出函数输出链表数据
print(H);
getchar();

printf("please input the name that you want to query:");
gets(qname);//输入字符型数据

if( !query(H,qname) ) //如果没有找到数据的情况 此时是!0 = 1,运行if语句
printf("No found!");
}


if语句那似乎不能用啊……这是为什么呢……劳驾各位帮忙看看
谢谢了

[解决办法]
加个

C/C++ code
#include <malloc.h>
[解决办法]
LS说的对,别的没看,但是malloc的时候要有引用啊~
[解决办法]
#include <stdlib.h>
[解决办法]
while (p != NULL);//如果链表结束,则循环结束
你单步调试下就出来了~~while循环判断后面没有分号啊~~不然一直死循环这句话,后面都执行不了了。。。。

把分号去掉就好了~~
while (p != NULL)//如果链表结束,则循环结束

热点排行