建文件 data.txt,文件内存放了一组数字,要实现以下功能:
1、读取该文件内的这组数字;
2、然后对其进行排序,要求按升序排序;
3、将排序后的内容另起一行输出到 data.txt 中。
【举例】
data.txt 中的原始数据为:
11.2 -98 33.6 52.1 0
程序运行后,data.txt 中的内容将被修改为:
11.2 -98 33.6 52.1 0
-98 0 11.2 33.6 52.1
#include <stdio.h>
#include <stdlib.h>
int main(){
FILE*fp;
char ch,data[10];
printf("请输入所用的文件名:");
scanf("%s",date);
getchar();
if((fp=fopen(data,"w"))=NULL)
{printf("无法打开此文件\n");
exit(0);
}
ch=getchar();
while(ch!=\0){
fputc(ch,fp);
printf("\n");
int j,k;
for(int i = 0;i < 9;i++) {
for(j = 0;j<10-i;j++) {
if(data[j]<date[j-1])
{
k=date[j-1];
date[j-1]=date[j];
date[j]=k;
}
}
}
putchar(ch);
ch=getchar();
}
fclose(fp);
putchar(10);
return 0;
}
我不知道该怎么做,文件这一节好懵。我的思路是先建一个date文件,然后在文件里输入一组数,然后排序输出
有没有人能教我一下该怎么改(>﹏<)
首先,要读取文件内的数字,我们需要使用 fscanf() 函数。然后我们可以使用冒泡排序算法对数字进行排序。最后,我们可以使用 fprintf() 函数将排序后的数字写回文件。
下面是实现上述功能的代码示例:
#include <stdio.h>
#define MAX_SIZE 10 // 最多可以读入的数字个数
int main() {
// 打开文件
FILE* fp = fopen("data.txt", "r+");
if (fp == NULL) {
printf("无法打开文件\n");
return 0;
}
// 读取文件中的数字
float numbers[MAX_SIZE];
int numCount = 0;
while (fscanf(fp, "%f", &numbers[numCount]) == 1) {
numCount++;
}
// 对数字进行排序
for (int i = 0; i < numCount; i++) {
for (int j = 0; j < numCount - i - 1; j++) {
if (numbers[j] > numbers[j + 1]) {
float temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
// 将排序后的数字写回文件
fseek(fp, 0, SEEK_SET); // 将文件指针移到文件开头
for (int i = 0; i < numCount; i++) {
fprintf(fp, "%.2f ", numbers[i]);
}
fprintf(fp, "\n");
// 关闭文件
fclose(fp);
return 0;
}