c语言字符串数组输出出现问号,为什么数组输出会多一个问号

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

#include"stdlib.h"

#include

#define G 1

enum function{ cold, stomach, anticatarrhals, gutta };

enum usage{koufu,waiyong,aftermeal,beforemeal};

typedef struct date_

{

int year, month, day;

}date;

typedef struct howuse_

{enum usage u;

int times;

int dosage;

}howuse;

typedef struct drug_

{

char name[20];//名称

char number[12];//编号

date product;//生产日期

int use;//有效期

date end;//失效日期

enum function f;//主治类别

howuse h;//用法与用量

struct drug_ * next;

}drug;

drug *head=NULL,*rear=NULL;

drug * search(char *num)

{

drug *p;

p=head;

while(p!=NULL&&strncmp(p->number,num,12)!=0)

{

p=p->next;

}

return p;

}

//根据编号寻找药品

bool isexist(date d)

{

bool flag=1;

if(d.day==0&&d.month==0&&d.year==0)

flag=0;

return flag;

}//判断失效日期是否存在

date add_(date d,int m)

{

int temp;

temp=m+(d.month);

if(temp>=12)

{

d.year++;

d.month=temp-12;

}

else d.month=temp;

return d;

}//日期和月份相加

bool compare(date d1,date d2)

{

bool flag=0;

if(d1.year>d2.year)flag=1;

else if(d1.year

else if(d1.month>d2.month)flag=1;

else if(d1.month

else if(d1.day>=d2.day)flag=1;

else flag=0;

return flag;

}

//比较两个日期大小

void cal_end()

{

char num[13];

date d3;

drug *d1;d1=(drug *)malloc(sizeof(struct drug_));

printf("请输入你想计算药品的编号:");

scanf("%s",num);

d1=search(num);

if(d1==NULL)

printf("无此药品");

if(isexist(d1->end))

printf("该药品的失效日期为:%d年%d月%d日\n",d1->end.year,d1->end.month,d1->end.day);

else {

d3=add_(d1->product,d1->use);

printf("该药品的失效日期为:%d年%d月%d日\n",d3.year,d3.month,d3.day);

free(d1);

}//计算失效日期

}

void add()

{

drug*p,*s;date d;float x;

p=(drug *)malloc(sizeof(struct drug_));

printf("请输入药品名称:");

scanf("%s",p->name);

printf("请输入编号:");

scanf("%s",p->number);

while(strlen(p->number)!=12)

{

printf("编号格式不对,请重新输入:");

scanf("%s",p->number);

}

while(head!=NULL)

{

s=search(p->number);

while(s!=p)

{

printf("该编号已经存在,请重新输入:");

scanf("%s",p->number);

}

}

L1: printf("请输入生产日期(年月日),没有请输入0:");

scanf("%d%d%d",&p->product.year,&p->product.month,&p->product.day);

if(p->product.year!=0)

{

while(p->product.month>12||p->product.month<1||p->product.day>30||p->product.month<0)

{

printf("日期格式不对,请检查后重新输入:");

scanf("%d%d%d",&p->product.year,&p->product.month,&p->product.day);

}

}

L2: printf("请输入有效期(没有请输入0):");

scanf("%f",&x);

while(fabs(x-(int)x)>1e-8)

{

printf("有效期非整数,请重新输入:");

scanf("%f",&x);

}

p->use=x;

printf("请输入失效日期(没有请输入0):");

scanf("%d%d%d",&p->end.year,&p->end.month,&p->end.day);

if(p->end.year!=0)

{

while(p->end.month>12||p->end.month<1||p->end.day>31||p->end.day<0)

{

printf("日期格式不对,请检查后重新输入:");

scanf("%d%d%d",&p->end.year,&p->end.month,&p->end.day);

}

}

if(isexist(p->product)&&p->use!=0&&isexist(p->end))

{

d=add_(p->product,p->use);

if(p->end.year!=d.year||p->end.month!=d.month||p->end.day!=d.day)

{

printf("生产日期有效期失效期矛盾:请检查后重新输入!");

goto L1;

}

}

if(isexist(p->product)&&p->use==0&&!isexist(p->end))

{

printf("信息缺失,请补充有效期或失效日期!");

goto L2;

}

if(!isexist(p->product)&&p->use!=0&&!isexist(p->end))

{

printf("信息缺失,请补充生产日期或失效日期");

goto L1;

}

if(!isexist(p->product)&&p->use==0&&!isexist(p->end))

{

printf("信息全部缺失,请补充!\n");

goto L1;

}

printf("请输入主治类别:1.感冒药 2.胃药 3.消炎药 4.滴眼液\n");

int a;

scanf("%d",&a);

switch(a)

{

case 1:p->f=cold;break;

case 2:p->f=stomach;break;

case 3:p->f=anticatarrhals;break;

case 4:p->f=gutta;break;

default:printf("输入错误!");break;

}

printf("请输入用法:1.口服,2.外用,3.饭前服用,4.饭后服用\n");

scanf("%d",&a);

switch(a)

{

case 1:p->h.u=koufu;break;

case 2:p->h.u=waiyong;break;

case 3:p->h.u=beforemeal;break;

case 4:p->h.u=aftermeal;break;

}

printf("请输入一日服用的次数:");

scanf("%d",&p->h.times);

printf("请输入一次服用的量(片/滴):");

scanf("%d",&p->h.dosage);

if(head==NULL)

{

head=p;

rear=p;

}

else {

rear->next=p;

rear=p;

}

p->next=NULL;

}

void print_(drug*p)

{

date d;

printf("**************************************\n");

printf("药品名称:%s\n",p->name);

printf("药品编号:%s\n",p->number);

if(isexist(p->product))

printf("生产日期:%d年%d月%d日\n",p->product.year,p->product.month,p->product.day);

else printf("生产日期暂无。\n");

if(p->use!=0)

printf("有效期为:%d个月\n",p->use);

else printf("有效期暂无\n");

if(isexist(p->end))

printf("失效日期:%d年%d月%d日\n",p->end.year,p->end.month,p->end.day);

else {

d=add_(p->product,p->use);

printf("该药品的失效日期为:%d年%d月%d日\n",d.year,d.month,d.day);

}

switch(p->f)

{

case 0:printf("主治类别:感冒药\n");break;

case 1:printf("主治类别:胃药\n");break;

case 2:printf("主治类别: 消炎药\n");break;

case 3:printf("主治类别:滴眼液\n");

}

switch(p->h.u)

{

case 0:printf("用法:口服\n");break;

case 1:printf("用法:外用\n");break;

case 2:printf("用法:饭前服用\n");break;

case 3:printf("用法:饭后服用\n");}

printf("一日次数:%d\n",p->h.times);

printf("每次的量:%d\n",p->h.dosage);

printf("**************************************");

}

//打印一种药品的所有信息

void print_end()

{

date d,d1,d2;

drug *q;q=head;

printf("请输入设定日期(年月日):");

scanf("%d%d%d",&d.year,&d.month,&d.day);

d1=add_(d,G);

if(isexist(q->end))

d2=q->end;

else d2=add_(q->product,q->use);

while(q!=NULL)

{

if(compare(d1,d2)&&!compare(d,d2))

{

print_(q);

q=q->next;}

}

}

void main()

{add();

print_end();

getchar();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值