任務如下:使用 generation() 函式用數字填充檔案 - 此處不能使用陣列。然后通過 read_file() 函式將數字讀入陣列中,并使用快速排序方法對其進行排序。輸出到控制臺。
我按照我自己的邏輯理解撰寫了代碼,但是在排序后將一組值輸出到控制臺,因為它是在記憶體不足的錯誤的情況下輸出的,有時會輸出帶有缺點的亂數。也許值得填寫動態陣列?為什么,如果我知道特定數量的元素?
請幫我弄清楚。
#include <stdio.h>
#include <stdlib.h>
#define N 10
#define A -25000
#define B 25000
void generation();
void read_file();
void method_simple_sort();
int main(void) {
generation();
method_simple_sort();
return EXIT_SUCCESS;
}
void generation() {
FILE *file;
int i;
file = fopen("index.txt", "w");
srand(time(0));
for (int i = 0; i < N; i ) {
fprintf(file, "%d\n", A rand() % (A - B 1));
}
fclose(file);
}
void read_file() {
FILE *file;
int i, a[N] = { 0 };
file = fopen("index.txt", "r");
for (i = 0; i < N; i ) {
fscanf(file, "%d ", &a[i]);
}
fclose(file);
for (int i = 0; i < N; i )
printf("%d ", a[i]);
}
void method_simple_sort() {
int a[N], i = 0, k = 0, ind_max = 0, temp = 0;
read_file();
for (k = 0; k < N - 1; k ) {
ind_max = k;
for (i = 1 k; i < N; i ) {
if (a[i] > a[ind_max]) {
ind_max = i;
}
}
temp = a[k];
a[k] = a[ind_max];
a[ind_max] = temp;
}
// вывод результатов в файл
printf("\n\nПростого выбора: ");
for (int i = 0; i < N; i ) {
printf("%d ", a[i]);
}
printf("\n\n\n\n");
}
uj5u.com熱心網友回復:
該函式method_simple_sort定義了一個區域陣列變數int a[N]。然后它呼叫read_file(),但read_file()不填充定義在 中的這個區域陣列變數method_simple_sort。相反,它填充了自己的區域陣列變數(也稱為 int a[N],但它與 in 中的不同 method_simple_sort)。
底線是,當method_simple_sort嘗試排序時,a它會對包含未初始化資料的陣列進行排序。
因此,您看到最后列印的“垃圾”值。
uj5u.com熱心網友回復:
方法使用的陣列read_file和不同的陣列method_simple_sort。當您在函式內宣告任何內容時,它會在空間的低級別進行轉換,以便在您呼叫函式時在堆疊上分配。
您應該轉換read_file(void)為read_file(int *a),而無需在內部宣告另一個陣列實體read_file。通過這樣做,您可以傳遞對內部宣告的陣列的參考method_simple_sort。
特別是:
void read_file(int *a) {
FILE *file;
int i;
/* a[N] = { 0 };*/
...
}
void method_simple_sort() {
int a[N], i = 0, k = 0, ind_max = 0, temp = 0;
read_file(a);
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/456846.html
