每日一题——第九十四题
// SortNumInFile.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。
//
题目:将一个文本文件number.txt中的数字按照从小到大排列后,重新写入到该文件中,要求排序前和排序后都输出该文件的内容。该文件中共有20个整数,每个整数占一行。
#include<stdio.h>
#include<stdlib.h>
void bubbleSort(int arr[], int length);
void swap(int* a, int* b);
int main() {
FILE* file = fopen("number.txt", "r");
if (file == NULL) {
perror("文件number.txt打开失败!");
return EXIT_FAILURE;
}
int numbers[20];
int count = 0;
//读取文件的所有整数
while (fscanf(file, "%d", &numbers[count]) != EOF && count < 20) {
count++;
}
//输出排序前的文件内容
printf("排序前的内容为:\n");
for (int i = 0; i < count; i++)
{
printf("%d\n", numbers[i]);
}
fclose(file);//先关闭文件,因为即将要重写它
bubbleSort(numbers, count);
file = fopen("number.txt", "w");//以写的方式打开
if (file == NULL) {
perror("文件打开写入失败");
return EXIT_FAILURE;
}
//将排序后的数据写回文件,一行一个数字
for (int i = 0; i < count; i++)
{
fprintf(file, "%d\n", numbers[i]);
}
fclose(file);//关闭文件
//再重新打开文件读取内容
file = fopen("number.txt", "r");
if (file == NULL) {
perror("文件打开读取失败");
return EXIT_FAILURE;
}
//输出排序后的文件内容
printf("排序后的内容为:\n");
for (int i = 0; i < count; i++)
{
printf("%d\n", numbers[i]);
}
fclose(file);//读取完成后,再关闭文件
return 0;
}
void bubbleSort(int arr[], int length) {
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - (i + 1); j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void bubbleSort(int arr[], int length) {
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - (i + 1); j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
void swap(int* a, int* b){
int temp = *a;
*a = *b;
*b = temp;
}