C语言读取TXT文件内容并排序! 急! 在线等!
以下是TXT文件内容:NationgoldsilverbronzesumChina19911998416Korea766591232Japan487494216Iran2...
以下是TXT文件内容:
Nation gold silver bronze sum
China 199 119 98 416
Korea 76 65 91 232
Japan 48 74 94 216
Iran 20 14 25 59
Kazakhstan 18 23 38 79
India 14 17 33 64
Chinese Taipei 13 16 38 79
Uzbekistan 11 22 23 56
Thailand 11 9 32 52
Malaysia 9 18 14 41
要求:
1。用C语言编写一个程序读取以上全部内容并在程序中显示
2。将以上内容按国家首字母从小到大排序 输入到TXT中并在程序中显示
3。将以上内容按国家奖牌总数从小到大排序 输入到TXT中并在程序中显示
也就是说完成以后 程序显示三段内容 TXT文件中也有三段内容
谢谢! 展开
Nation gold silver bronze sum
China 199 119 98 416
Korea 76 65 91 232
Japan 48 74 94 216
Iran 20 14 25 59
Kazakhstan 18 23 38 79
India 14 17 33 64
Chinese Taipei 13 16 38 79
Uzbekistan 11 22 23 56
Thailand 11 9 32 52
Malaysia 9 18 14 41
要求:
1。用C语言编写一个程序读取以上全部内容并在程序中显示
2。将以上内容按国家首字母从小到大排序 输入到TXT中并在程序中显示
3。将以上内容按国家奖牌总数从小到大排序 输入到TXT中并在程序中显示
也就是说完成以后 程序显示三段内容 TXT文件中也有三段内容
谢谢! 展开
4个回答
展开全部
给你写了一个,累死了,给我加分啊~~
程序运行完之后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);
}
程序运行完之后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);
}
展开全部
#include <stdio.h>
#include <stdlib.h>
//假设要打开的文件内容全是整数(如果是浮点数参照修改)
//数据与数据之间用空格分开
//每行多少数据可以不相同
//数组从小到大排序
void sortit(int *a,int n) {
int i,j,m;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]){
m=a[i];a[i]=a[j];a[j]=m;
}
}
//输出数组元素
void printit(int *a,int n){
int i;
for(i=0;i<n;i++){
printf("%5d",a[i]);
if (i%10==9) printf("\n"); //设置每10个换行
}
}
//从文件fp中读取n个数据到a
void getdata(FILE *fp,int *a,int n){
int i;
fseek(fp,0,0);
for(i=0;i<n;i++)
fscanf(fp,"%d",&a[i]);
}
//获取文件中整数数椐的个数
int getdatabound(FILE *fp){
int i=0,n;
fseek(fp,0,0);
while(fscanf(fp,"%d",&n)!=EOF) i++;
return i;
}
int main(){
int n,*a;
char *myfile="d:\\data.txt";
FILE *fp;
if ((fp=fopen(myfile,"r"))==NULL){
printf("打开文件%s失败\n",myfile);
return 0;
}
n=getdatabound(fp); //获取该文件中有多少整数
printf("该文件共有%d个整数\n",n);
a=(int *)malloc(sizeof(int)*n); //分配n个整数的空间
getdata(fp,a,n); //从文件fp中读取n个数据到a
fclose(fp);
printf("排序前的数组\n");
printit(a,n); //输出数组的值
printf("\n");
sortit(a,n);
printf("排序后的数组\n");
printit(a,n);
printf("\n");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下面是可以实现1的代码。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char buf[439];
int read_txt( FILE *name );
main()
{
int res;
FILE *file;
file = fopen ( "C:\\Users\\yyy\\Desktop\\111.txt", "r" );
res = read_txt( file );
if (res == 0)
printf("sucessful !\n");
else
printf("error !\n");
system( "pause" );
return 0;
}
int read_txt( FILE *name )
{
if ( name != NULL )
fread(buf, 1024, 1, name);
printf("%s\n", buf);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char buf[439];
int read_txt( FILE *name );
main()
{
int res;
FILE *file;
file = fopen ( "C:\\Users\\yyy\\Desktop\\111.txt", "r" );
res = read_txt( file );
if (res == 0)
printf("sucessful !\n");
else
printf("error !\n");
system( "pause" );
return 0;
}
int read_txt( FILE *name )
{
if ( name != NULL )
fread(buf, 1024, 1, name);
printf("%s\n", buf);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
d
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询