我有一個問題,將結果保存到文件。這是我的代碼:堆排序保存結果文件
#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。請幫幫我。
在使用返回值之前,請檢查'fopen()'是否成功;如果失敗,你可能會崩潰,但即使你不這樣做,它仍然是未定義的行爲。 –