gpt4 book ai didi

c - 堆排序将结果保存到文件

转载 作者:行者123 更新时间:2023-11-30 14:23:26 24 4
gpt4 key购买 nike

我在将结果保存到文件时遇到问题。这是我的代码:

#include<stdio.h>
#include<stdlib.h>
#define DUZO 100000000
int heap_size;
int tab[DUZO];
FILE* wejscie;
FILE* wyjscie;

void rand1(int tmp){
int i, y;

for(i = 0; i < tmp; i++){
y = rand();
fprintf(wejscie, "%i ", y);
}
}

void heapify(int start){
int l, r, largest, pom;

l = 2*start + 1;
r = 2*start + 2;

if((l < heap_size) && (tab[l] > tab[start]))
largest = l;
else
largest = start;

if((r < heap_size) && (tab[r] > tab[largest]))
largest = r;
if(largest != start){
pom = tab[start];
tab[start] = tab[largest];
tab[largest] = pom;

heapify(largest);
}
}

void build_max(){
int lenght, i;
lenght = heap_size;

for(i = ((lenght - 1)/2); i >= 0; --i){
heapify(i);
}
}

void heap_sort(){
int i;
build_max();


for(i = heap_size-1; i > 0; --i) {
int tmp = tab[0];
tab[0] = tab[i];
tab[i] = tmp;
--heap_size;
heapify(0);
}
}

int main(void){

wejscie=fopen("wejscie.dat","rw");
wyjscie=fopen("wyjscie.dat","w");

int i, tmp;

printf("Podaj ilosc liczb do sortowania: ");
scanf("%i", &heap_size);
tmp = heap_size;

rand1(tmp);

printf("Pseudolosowe liczby do posortowania: \n");
for(i = 0; i < tmp; i++){
fscanf(wejscie,"%i", &tab[i]);
printf("%i\n", tab[i]);
}

heap_sort();

fclose(wejscie);

printf("\nPosortowany ciag: \n");
for(i = 0; i < tmp; i++){
printf("%i\n", tab[i]);
fprintf(wyjscie, "%i\n", tab[i]);
}

fclose(wyjscie);
return 0;
}

当我创建文件 wejscie.dat 时,程序运行良好,但是当我不使用 rand 函数创建它时,它不起作用,并且不会将结果保存到文件 wejscie.dat。请帮助我。

最佳答案

wejscie.dat 是您的输入文件。显然,您正在向其中写入随机值并再次读取它以加载 tab[]。您可以通过在 rand1() 本身中初始化数组来跳过创建文件。

wyjscie.dat 是您的输出文件,而不是 wejscie.dat

PS:以 “w+”模式打开输入文件并 倒回,然后再次读取。

    wejscie = fopen("wejscie.dat", "w+");
if (NULL == wejscie) {
fprintf( stderr, "ERROR: Opening Input file Err[%d] Error[%s]", errno, strerror(errno));
//Formal error handling
return (-1);
}
//...
//...
rand1(tmp);
rewind (wejscie);
fprintf( stderr, "Pseudolosowe liczby do posortowania: \n");

关于c - 堆排序将结果保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12881121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com