执行该程序 总出现 0x0040d8da指令引用的内存 不能为READ

来源:百度知道 编辑:UC知道 时间:2024/06/03 19:28:24
#include"stdio.h"
struct nyr{
int a;
int b;
int c;
};
void days(struct nyr *pt);
int main()
{
int m;
struct nyr fact,*p;
printf("查询--1\n退出--2\n");
scanf("%d",&m);
do{
switch(m){
case 1:p=&fact;
printf("输入年月日:\n");
scanf("%d%d%d",&fact.a ,&fact.b,&fact.c );
days(p);
break;
case 2:printf("感谢试用\n");
break;
}
}
while(m!=2);
return 0;
}

void days(struct nyr *pt)
{
int a[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31},q,w,e;
q=(pt->a%4==0&&pt->a%100!=0)||pt->a%400==0;
for(w==0;w<pt->b;w++)
e+=a[q][w];
printf("是今年的第%d天\n",e+pt->c);
}

存在这么几个问题:
1.在days函数里,e没有赋初值0
2.在days函数里,for语句后面的w==0应改成w=0
3.主函数里面无法退出,应该在case 1里面加上读取m的语句。

我改了一下,你对照看一下就知道了。
#include"stdio.h"
struct nyr{
int a;
int b;
int c;
};
void days(struct nyr *pt);
int main()
{
int m;
struct nyr fact,*p;
printf("查询--1\n退出--2\n");
scanf("%d",&m);
do{
switch(m)
{
case 1:p=&fact;
printf("输入年月日:\n");
scanf("%d%d%d",&fact.a ,&fact.b,&fact.c );
days(p);
printf("查询--1\n退出--2\n");
scanf("%d",&m);
break;
case 2:printf("感谢试用\n");
break;
}
}while(m!=2);
return 0;
}

void days(struct nyr *pt)
{
int a[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31},q,w,e=0;
q=