在獲取矩陣的縮減行梯形表格的程序開始時,我將用於打印數組的代碼轉換爲它自己的函數。只要我這樣做,我有段錯誤。但是,我感到困惑的是,一個無關的變量聲明(下面評論)解決了段錯誤。需要說明奇數for循環/範圍問題
#include <stdio.h>
int COLS = 3;
int ROWS = 3;
void PrintArray(int array[][COLS]);
int main (int argc, char**argv) {
int i, ii = 0;
FILE *file;
file = fopen(argv[1], "r");
int array[ROWS][COLS];
fscanf(file, "%d %d", &ROWS, &COLS);
while (!feof(file))
{
fscanf(file, "%d", &array[i][ii]);
ii++;
if (fgetc(file) == '\n') {
i++;
ii = 0;
}
}
int j = 0, k = 0; //This solved the segfault.
PrintArray(array);
printf("\n");
fclose(file);
return 0;
}
void PrintArray(int array[][COLS]) //The printing function
{
int j, k;
for (j = 0; j < ROWS; j++)
{
for (k = 0; k < COLS; k++)
{
printf("%d", array[j][k]);
}
printf("\n");
}
}
經過幾個小時的調試,我最終發現它可能與for循環中的變量範圍有關。
舉例說明:
int COLS = 3;
int ROWS = 3;
int a; //declared globally
//main
for (a = 0; a < ROWS; a++) {
printf("for loop");
}
作品,但只要我宣佈 「了」 主:
int COLS = 3;
int ROWS = 3;
//main
int a; //declared in main
for (a = 0; a < ROWS; a++) {
printf("for loop");
}
這是行不通的。另外,如果我用數字替換全局變量,我仍然會得到一個段錯誤,直到我刪除最初修復段錯誤的行!
void PrintArray(int array[][3]) //COLS
{
int j = 0, k = 0;
for (j = 0; j < 3; j++) //ROWS
{
for (k = 0; k < 3; k++) //COLS
{
printf("%d", array[j][k]);
}
printf("\n");
}
}
這似乎是盡我所能理解的問題,所以你的幫助將不勝感激。
從文件中讀取的ROWS和COLS的值是什麼? –
它們是文件中的前兩個數字。正如Eugene指出的那樣,ROWS和COLS的值實際上並沒有改變,我沒有理解這一點,因爲我忘記測試3以外的值3. – AsianBorat