c语言程序运行总是显示已停止工作,怎没改啊!!!求解!!! 20
#include<stdio.h>#include<string.h>typedefstruct{charbookname[100];/*书名*/charauthor[1...
#include<stdio.h>
#include<string.h>
typedef struct{
char bookname[100];/*书名*/
char author[100];/*作者*/
char bookconcern[100];/*出版社*/
char ISBN[100];/*ISBN*/
double time;/*出版日期*/
double money;/*价格*/
char classification[100];/*类别*/
}book;/*书籍结构体*/
typedef struct{
char bookconcern[100];
int num;
}book1;
/*子函数声明*/
void rank(book t[],int n);/*日期降序排列*/
void classify(book t[],int n);/*分类*/
void count(book t[],book1 t1[],int n);/*统计*/
int countbc(book t[],int n);
/*主函数*/
main()
{
FILE *fp1;
FILE *fp2;
book t[100000];
memset(t,0,sizeof(book)*100000);
book1 t1[100000];
memset(t1,0,sizeof(book1)*100000);
int n=0;/*统计总数量*/
int i;
int j;
if((fp1=fopen("1.txt","r"))==NULL)
return -1;
if((fp2=fopen("2.txt","w"))==NULL)
return -1;
while(!feof(fp1))
{
fscanf(fp1,"%s%s%s%s%lf%lf%s",t[n].bookname,t[n].author,t[n].bookconcern,t[n].ISBN,&t[n].time,&t[n].money,t[n].classification);
n++;
}
rank(t,n);
classify(t,n);
j=countbc(t,n);
count(t,t1,n);
for(i=0;i<n;i++)
fprintf(fp2,"%s %s %s %s %0.2lf %0.2lf %s\n",t[i].bookname,t[i].author,t[i].bookconcern,t[i].ISBN,t[i].time,t[i].money,t[i].classification);
for(i=0;i<j;i++)
fprintf(fp2,"%s %d\n",t1[i].bookconcern,t1[i].num);
fclose(fp1);
fclose(fp2);
return 0;
}
void classify(book t[],int n)
{
int i,j,k;
book s;
for(i=0;i<n;i++)
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(t[j].bookconcern,t[k].bookconcern)<0)
k=j;
if(k!=i)
{s=t[k];
t[k]=t[i];
t[i]=s;}
}
}
void rank(book t[],int n)
{
int i,j,k;
book s;
for(i=0;i<n;i++)
{k=i;
for(j=i+1;j<n;j++)
if(t[j].time>t[k].time)
k=j;
if(k!=i)
{s=t[k];
t[k]=t[i];
t[i]=s;}
}
}
void count(book t[],book1 t1[],int n)
{
int i,j,k;
i=0;
j=0;
k=0;
while(t[i].bookconcern==t[i-1].bookconcern)
{
i++;
}
strcpy(t1[k].bookconcern,t[i].bookconcern);
t1[k].num=i;
k++;
for(i=0;i<n;i++)
{if(t[i].bookconcern!=t[i-1].bookconcern)
{strcpy(t1[k].bookconcern,t[i].bookconcern);
for(j=i+1;j<n;j++)
{if(t[j].bookconcern!=t[j+1].bookconcern)
t1[k].num=j-i;
k++;
}
}
}
}
int countbc(book t[],int n)
{
int i,j;
j=0;
for(i=0;i<n;i++)
if(t[i].bookconcern!=t[i-1].bookconcern)
j++;
return j;
} 展开
#include<string.h>
typedef struct{
char bookname[100];/*书名*/
char author[100];/*作者*/
char bookconcern[100];/*出版社*/
char ISBN[100];/*ISBN*/
double time;/*出版日期*/
double money;/*价格*/
char classification[100];/*类别*/
}book;/*书籍结构体*/
typedef struct{
char bookconcern[100];
int num;
}book1;
/*子函数声明*/
void rank(book t[],int n);/*日期降序排列*/
void classify(book t[],int n);/*分类*/
void count(book t[],book1 t1[],int n);/*统计*/
int countbc(book t[],int n);
/*主函数*/
main()
{
FILE *fp1;
FILE *fp2;
book t[100000];
memset(t,0,sizeof(book)*100000);
book1 t1[100000];
memset(t1,0,sizeof(book1)*100000);
int n=0;/*统计总数量*/
int i;
int j;
if((fp1=fopen("1.txt","r"))==NULL)
return -1;
if((fp2=fopen("2.txt","w"))==NULL)
return -1;
while(!feof(fp1))
{
fscanf(fp1,"%s%s%s%s%lf%lf%s",t[n].bookname,t[n].author,t[n].bookconcern,t[n].ISBN,&t[n].time,&t[n].money,t[n].classification);
n++;
}
rank(t,n);
classify(t,n);
j=countbc(t,n);
count(t,t1,n);
for(i=0;i<n;i++)
fprintf(fp2,"%s %s %s %s %0.2lf %0.2lf %s\n",t[i].bookname,t[i].author,t[i].bookconcern,t[i].ISBN,t[i].time,t[i].money,t[i].classification);
for(i=0;i<j;i++)
fprintf(fp2,"%s %d\n",t1[i].bookconcern,t1[i].num);
fclose(fp1);
fclose(fp2);
return 0;
}
void classify(book t[],int n)
{
int i,j,k;
book s;
for(i=0;i<n;i++)
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(t[j].bookconcern,t[k].bookconcern)<0)
k=j;
if(k!=i)
{s=t[k];
t[k]=t[i];
t[i]=s;}
}
}
void rank(book t[],int n)
{
int i,j,k;
book s;
for(i=0;i<n;i++)
{k=i;
for(j=i+1;j<n;j++)
if(t[j].time>t[k].time)
k=j;
if(k!=i)
{s=t[k];
t[k]=t[i];
t[i]=s;}
}
}
void count(book t[],book1 t1[],int n)
{
int i,j,k;
i=0;
j=0;
k=0;
while(t[i].bookconcern==t[i-1].bookconcern)
{
i++;
}
strcpy(t1[k].bookconcern,t[i].bookconcern);
t1[k].num=i;
k++;
for(i=0;i<n;i++)
{if(t[i].bookconcern!=t[i-1].bookconcern)
{strcpy(t1[k].bookconcern,t[i].bookconcern);
for(j=i+1;j<n;j++)
{if(t[j].bookconcern!=t[j+1].bookconcern)
t1[k].num=j-i;
k++;
}
}
}
}
int countbc(book t[],int n)
{
int i,j;
j=0;
for(i=0;i<n;i++)
if(t[i].bookconcern!=t[i-1].bookconcern)
j++;
return j;
} 展开
展开全部
int a,b;
scanf("%d%d",&a,&b);//参数必须是指针(地址)才可以。
scanf()函数要求参数必须是指针类型,即将地址传输到其内,才可以让a , b变量中获取到数据。
如果你学过指针,你就会理解了。
C语言中函数的调用中,参数传递,只能传递数值。如果只是将数值传递过去(接收者是形参),在子函数中变化,形参的变化,不会影响到实参数据的内容。
C中,每定义一个变量,系统都会在内存中给其分配一个空间用来存储数据。而这个空间的编号就是这个变量的地址。当我们将这个地址传递到子函数中,子函数在操作数据时,就会改变这个地址中的数据,这样,实参的数据是会发生变化。
而你程序中,传递的是a b本身的值(可能是0,可能是1,可能是任意的数),scanf()将这两个值当作地址去操作,因此会产生系统错误,导致程序运行停止。
scanf("%d%d",&a,&b);//参数必须是指针(地址)才可以。
scanf()函数要求参数必须是指针类型,即将地址传输到其内,才可以让a , b变量中获取到数据。
如果你学过指针,你就会理解了。
C语言中函数的调用中,参数传递,只能传递数值。如果只是将数值传递过去(接收者是形参),在子函数中变化,形参的变化,不会影响到实参数据的内容。
C中,每定义一个变量,系统都会在内存中给其分配一个空间用来存储数据。而这个空间的编号就是这个变量的地址。当我们将这个地址传递到子函数中,子函数在操作数据时,就会改变这个地址中的数据,这样,实参的数据是会发生变化。
而你程序中,传递的是a b本身的值(可能是0,可能是1,可能是任意的数),scanf()将这两个值当作地址去操作,因此会产生系统错误,导致程序运行停止。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询