不知道为什么老是编译错误,哪里出问题了吗,有人可以帮我看看吗
后面你在使用这个函数的时候,至少不能在括号后面加分号。
代码使用cpp文件,使用链队。
在病人排队过程中,主要重复两件事:
(1)病人到达诊室,将病历交给护士,排到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊。
要求模拟病人等待就诊这一过程。程序采用菜单方式,其选项及功能说明如下:
#include<stdio.h>
#include<malloc.h>
typedef struct qnode
{//链队节点类型
int data;
struct qnode *next;
}QNode;
typedef struct
{//队头、队尾指针
QNode *front,*rear;
}QuType;
void Destroyqueue(QuType *&qu)
{//自由链队
QNode *p,*q;
p=qu->front;
if(p!=NULL)//若链队不为空
{
q=p->next;
while(q!=NULL)
{//让队中节点自由
free(p);
p=q;
q=q->next;
}
free(p);free(q);
}
free(qu);//自由链队节点
}
void SeeDoctor()
{
int sel,flag=1,find,no;
QuType *qu;
QNode *p;
qu=(QuType *)malloc(sizeof(QuType));//创建空队列
qu->front=qu->rear=NULL;
while(flag==1)//循环执行
{
printf("1.排队;2.就诊;3.查看排队;4.不再排队,余下依次就诊;5.下班\n");
printf("请选择:");scanf("%d",&sel);
switch(sel)
{
case 1:printf("---请输入病例号:");//排队
do{
scanf("%d",&no);
find=0;//如果有重复排队,则为1
p=qu->front;
while(p!=NULL&&!find)//查看是否重复排队
{
if(p->data==no)find=1;
else p=p->next;
}
if(find) printf("---输入病历号重复,请重新输入:");
}while(find==1);//找到重复的,重新读取
p=(QNode *)malloc(sizeof(QNode));//创建新节点
p->data=no;p->next=NULL;//节点赋值
if(qu->rear==NULL)
qu->front=qu->rear=p;//确认第一个节点为p,头结点为p
else{
qu->rear->next=p;
qu->rear=p;
}
break;
case 2:if(qu->front==NULL)//就诊
printf("---没有排队的病人!\n");
else{
p=qu->front;//p节点取第一个节点
printf("---病人%d就诊\n",p->data);
if(qu->rear==p)//如果链队就一个元素,现在便为空
qu->front=qu->rear=NULL;
else//不然前指针就右走一个
qu->front=p->next;
free(p);//自由p节点
}
break;
case 3:if(qu->front==NULL)//查看排队
printf("---没有排队的病人!\n");
else{
p=qu->front;//p节点取第一个节点
printf("---排队病人:");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
break;
case 4:if(qu->front==NULL)//不再排队,余下依次就诊
printf("---没有排队的病人!\n");
else{
p=qu->front;//p节点取第一个节点
printf("---病人按照以下顺序就诊:");
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}printf("\n");
}
flag=0;
Destroyqueue(qu);
break;
case 5:if(qu->front==NULL)//下班
printf("---没有排队的病人!\n");
printf("提示未就诊的病人明天再来\n");
flag=0;
Destroyqueue(qu);
break;
}
}
}
void main()
{
SeeDoctor();
}
输出
输入
1
3018
1
3019
1
3020
3
2
3
4
5
针对编译错误频繁出现的问题,可能原因有很多,以下是一些可能的解决方案:
1.检查代码语法错误
编写代码时,语法错误很容易出现,例如拼写错误、大小写错误、括号不匹配等。这些错误通常可以通过编译器的错误输出信息快速定位出来,详细信息包括错误类型、错误行数和错误描述等,需要认真查看。
2.检查代码逻辑错误
如果代码的语法正确但逻辑错误,这往往是最难调试的问题。解决这种问题需要仔细检查变量的赋值和计算、循环和条件语句等,排查出代码中的问题后进行修复。
3.使用调试工具
调试工具可以帮助开发人员定位和解决问题,提供相关的调试信息,例如内存使用情况、调用堆栈和变量值等。在编译代码时,启用调试模式可以输出调试信息,也可以手动添加调试信息。调试工具包括IDE内置调试器和第三方工具,例如GDB和valgrind等。
4.优化编译选项
编译选项可以影响代码的运行效率和可移植性,选择合适的编译选项可以降低代码出错的可能性。例如,开启-Wall选项可以输出所有警告信息,加入-O选项可以优化代码执行效率。
这些解决方案并不是银弹,每个问题都有其独特的解决方案,需要根据具体情况进行调试和优化。但是,通过多年的实践经验,以上方案是最常见和有效的方法之一。
试了下,没啥问题:
#include <stdio.h>
int Cow(int n);
int main()
{
int day;
scanf("%d", &day);
printf("%d\n", Cow(day));
return 0;
}
int Cow(int n)
{
int m;
if (n < 4)
m = n;
else
m = Cow(n - 1) + Cow(n - 3);
return m;
}