菜鸟c++问题,这些错误提示是啥意思?
#include<iostream>#include<string>#include<conio.h>#defineNULL0usingnamespacestd;stru...
#include<iostream>
#include<string>
#include<conio.h>
#define NULL 0
using namespace std;
struct student
{int num;
float score;
struct student *next;};
int n;
student *creat()
{student *head;
student *p1,*p2;
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=p2->next=p1;
p1=new student;
cin>>p1->num>>p1->score;
}
p2->next=NULL;
return(head);}
void print(student *h)
{student *p;
cout<<endl<<"共有 "<<n<<" 个结点"<<endl;
p=h;
if(h!=NULL)
do
{cout<<p->num<<" "<<p->score<<endl;
p=p->next;}
while(p!=NULL);
else cout<<endl<<"没有结点"<<endl;
}
int main()
{student *pt;
pt=creat();
print(pt);
getch();
}
我用的是DEV-C++,哪有问题啊?能运行,但是有很多错误提示。为什么?
4:1 D:\My Documents\未命名10.cpp [Warning] "NULL" redefined
52 D:\Program Files\DEV-CPP\include\stdlib.h:22,
from D:\Program Files\DEV-CPP\include\c++\3.4.2\cstdlib In file included
from D:/Program Files/DEV-CPP/include/stdlib.h:22,
from D:/Program Files/DEV-CPP/include/c++/3.4.2/cstdlib
399:1 D:\Program Files\DEV-CPP\lib\gcc\mingw32\3.4.2\include\stddef.h
[Warning] this is the location of the previous definition
另外,我的本意是一旦输入0,敲回车后就结束循环,但目前情况是,输入0后,还需要再输入后面的p1->score,再回车才能执行,请问这里该怎么处理? 展开
#include<string>
#include<conio.h>
#define NULL 0
using namespace std;
struct student
{int num;
float score;
struct student *next;};
int n;
student *creat()
{student *head;
student *p1,*p2;
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=p2->next=p1;
p1=new student;
cin>>p1->num>>p1->score;
}
p2->next=NULL;
return(head);}
void print(student *h)
{student *p;
cout<<endl<<"共有 "<<n<<" 个结点"<<endl;
p=h;
if(h!=NULL)
do
{cout<<p->num<<" "<<p->score<<endl;
p=p->next;}
while(p!=NULL);
else cout<<endl<<"没有结点"<<endl;
}
int main()
{student *pt;
pt=creat();
print(pt);
getch();
}
我用的是DEV-C++,哪有问题啊?能运行,但是有很多错误提示。为什么?
4:1 D:\My Documents\未命名10.cpp [Warning] "NULL" redefined
52 D:\Program Files\DEV-CPP\include\stdlib.h:22,
from D:\Program Files\DEV-CPP\include\c++\3.4.2\cstdlib In file included
from D:/Program Files/DEV-CPP/include/stdlib.h:22,
from D:/Program Files/DEV-CPP/include/c++/3.4.2/cstdlib
399:1 D:\Program Files\DEV-CPP\lib\gcc\mingw32\3.4.2\include\stddef.h
[Warning] this is the location of the previous definition
另外,我的本意是一旦输入0,敲回车后就结束循环,但目前情况是,输入0后,还需要再输入后面的p1->score,再回车才能执行,请问这里该怎么处理? 展开
6个回答
展开全部
/* test.cpp
*
* g++ -g test.cpp -o test.exe
*
*/
#include <iostream>
#include <string>
#include <conio.h>
//#define NULL 0
#define DEBUG 1
using namespace std;
typedef struct STUDENT
{
int num;
float score;
STUDENT *next;
}STUDENT;
int n=0;
STUDENT *creat()
{
STUDENT *head;
STUDENT *p,*q;
p=NULL;q=NULL;
head=NULL;n=0;
do
{
p=new STUDENT;
if(!p){
cout<<"STUDENT create error!"<<endl;
exit(1);
}
cout<<"num:"<<endl;
cin>>p->num;
cout<<"score:"<<endl;
cin>>p->score;
p->next=NULL;
if(DEBUG)cout<<"num="<<p->num<<";score="<<p->score<<endl;
if(head==NULL)
{
head=q=p;
} else {
q->next=p;
q=p;
}
q->next=NULL;
n++;
}
while (p->num!=0);
return(head);
}
void print(STUDENT *h)
{
STUDENT *p;
cout<<endl<<"共有 "<<n<<" 个结点"<<endl;
p=h;
if(h!=NULL)
do
{
cout<<p->num<<" "<<p->score<<endl;
p=p->next;}
while(p!=NULL);
else cout<<endl<<"没有结点"<<endl;
}
int main()
{
STUDENT *pt;
pt=creat();
print(pt);
//if(DEBUG)getch();
return 0;
}
我主要改了:
1、学生的结构定义,在最后加了一个STUDENT
2、改变了一下create函数里的内容。使程序更易读,好理解。希望这个程序对你有所帮助。
3、通常在主程序中不用getch(),一般常用有IDE中开发(DEV,Turber)之类的,为得是能在运行时看到运行结果。如果你就在终端中开发或者有在命令窗口中有运行,就用不着getch()
4、如果是用GCC编译时通常在程序末加一空行。
如果问题可留言给我
*
* g++ -g test.cpp -o test.exe
*
*/
#include <iostream>
#include <string>
#include <conio.h>
//#define NULL 0
#define DEBUG 1
using namespace std;
typedef struct STUDENT
{
int num;
float score;
STUDENT *next;
}STUDENT;
int n=0;
STUDENT *creat()
{
STUDENT *head;
STUDENT *p,*q;
p=NULL;q=NULL;
head=NULL;n=0;
do
{
p=new STUDENT;
if(!p){
cout<<"STUDENT create error!"<<endl;
exit(1);
}
cout<<"num:"<<endl;
cin>>p->num;
cout<<"score:"<<endl;
cin>>p->score;
p->next=NULL;
if(DEBUG)cout<<"num="<<p->num<<";score="<<p->score<<endl;
if(head==NULL)
{
head=q=p;
} else {
q->next=p;
q=p;
}
q->next=NULL;
n++;
}
while (p->num!=0);
return(head);
}
void print(STUDENT *h)
{
STUDENT *p;
cout<<endl<<"共有 "<<n<<" 个结点"<<endl;
p=h;
if(h!=NULL)
do
{
cout<<p->num<<" "<<p->score<<endl;
p=p->next;}
while(p!=NULL);
else cout<<endl<<"没有结点"<<endl;
}
int main()
{
STUDENT *pt;
pt=creat();
print(pt);
//if(DEBUG)getch();
return 0;
}
我主要改了:
1、学生的结构定义,在最后加了一个STUDENT
2、改变了一下create函数里的内容。使程序更易读,好理解。希望这个程序对你有所帮助。
3、通常在主程序中不用getch(),一般常用有IDE中开发(DEV,Turber)之类的,为得是能在运行时看到运行结果。如果你就在终端中开发或者有在命令窗口中有运行,就用不着getch()
4、如果是用GCC编译时通常在程序末加一空行。
如果问题可留言给我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
NULL在C中本身就是一个值,上面那一句的意思 就是NULL这个值被你重新定义了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那些只是警告,不是错误,重定义NULL也是可以的,不过是多此一举,没有错,至于程序
cin>>p1->num;
head=NULL;
while(p1->num!=0)
{cin>>p1->score;
n=n+1;
把那句输入放到循环里面就行了
cin>>p1->num;
head=NULL;
while(p1->num!=0)
{cin>>p1->score;
n=n+1;
把那句输入放到循环里面就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将你的cin输入分两步,然后在第一次输入的时候判断一下输入的是否为0.
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你需要动态的期创建每个节点,还有就是不要对NULL进行冲定义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |