给你写了一个,累死了,给我加分啊~~
程序运行完之后txt中的内容会变成三段,如果想要再运行一遍,需要将txt内容还原成最初的,否则会出错。
#include <stdio.h>
#include <string.h>
typedef struct
{
char nation[128];
int gold;
int silver;
int bronze;
int sum;
}medal;
void main()
{
medal table[20];
medal tmp;
char buf[256];
char title[256];
FILE *fp;
int table_len = 0,i,j;
fp = fopen("text.txt","r+");
if(fp == NULL)
{
printf("read error!\n");
return;
}
fgets(title,256,fp);
fputs(title,stdout);
while(fgets(buf, 256, fp) != NULL)
{
sscanf(buf, "%[^1-9]%d%d%d%d",table[table_len].nation,&table[table_len].gold, &table[table_len].silver, \
&table[table_len].bronze,&table[table_len].sum);
printf("%s%-6d%-8d%-8d%d\n",table[table_len].nation,table[table_len].gold,table[table_len].silver, \
table[table_len].bronze,table[table_len].sum);
table_len++;
}
printf("\nOrder by country name:\n");
fprintf(fp, "\nOrder by country name:\n");
fputs(title,stdout);
fputs(title,fp);
for(j=0; j<(table_len-1); j++)
{
for(i=0; i<(table_len-1-j);i++)
{
if(strcmp(table[i].nation, table[i+1].nation) > 0)
{
tmp = table[i];
table[i] = table[i+1];
table[i+1] = tmp;
}
}
}
for(i=0;i<table_len;i++)
{
printf("%s%-6d%-8d%-8d%d\n",table[i].nation,table[i].gold,table[i].silver, \
table[i].bronze,table[i].sum);
fprintf(fp,"%s%-6d%-8d%-8d%d\n",table[i].nation,table[i].gold,table[i].silver, \
table[i].bronze,table[i].sum);
}
printf("\nOrder by number of medals:\n");
fprintf(fp, "\nOrder by number of medals:\n");
fputs(title,stdout);
fputs(title,fp);
for(j=0; j<(table_len-1); j++)
{
for(i=0; i<(table_len-1-j);i++)
{
if(table[i].sum > table[i+1].sum)
{
tmp = table[i];
table[i] = table[i+1];
table[i+1] = tmp;
}
}
}
for(i=0;i<table_len;i++)
{
printf("%s%-6d%-8d%-8d%d\n",table[i].nation,table[i].gold,table[i].silver, \
table[i].bronze,table[i].sum);
fprintf(fp,"%s%-6d%-8d%-8d%d\n",table[i].nation,table[i].gold,table[i].silver, \
table[i].bronze,table[i].sum);
}
fclose(fp);
}
温馨提示:答案为网友推荐,仅供参考