Преобразование массива 2d int в массив 2d char (filein to fileout) в C

Это вопрос из cprimerplus 6-е изд. Я пытаюсь открыть файл, содержащий блок 20х30 разделенных пробелами чисел со значениями от 0 до 9, и распечатать его в другом файле с теми значениями, которые соответствуют символам возрастающей темноты.

Вот мой код, но я продолжаю получать ошибку сегментации (дамп памяти), и выходной файл пуст. Я попробовал код из руководства по решению, и хотя он отличается от моего, я все еще получаю ошибку сегментации. Может ли кто-нибудь помочь мне выяснить, что вызывает это?

#include <stdio.h>
#include <stdlib.h>
#define ROWS 20
#define COLS 30
#define LEVELS 10
const char trans[LEVELS + 1] = " .-=+xX$%#"; 

int main(int argc, char *argv[]) {
int row, col;
int picdata[ROWS][COLS];
FILE *datafile;
FILE *outfile;

if (argc != 3) {
    fprintf(stderr, "usgae: %s [data] [outfile]\n", argv[0]);
    exit(EXIT_FAILURE);
}
if ((datafile = fopen(argv[1], "rb")) == NULL) {
    fprintf(stderr, "Error opening file %s.\n", argv[1]);
    exit(EXIT_FAILURE);
}
for (row = 0; row < ROWS; row++) 
    for (col = 0; col < COLS; col++) 
        fscanf(datafile, "%d", &picdata[row][col]);

if (ferror(datafile)) {
    fprintf(stderr, "Error reading data file %s.\n", argv[1]);
    exit(EXIT_FAILURE);
}
if (fclose(datafile) != 0) {
    fprintf(stderr, "Error closing file %s.\n", argv[1]);
    exit(EXIT_FAILURE);
}
if ((outfile = fopen(argv[2], "w")) == NULL) {
    fprintf(stderr, "Error opening file %s.\n", argv[2]);
    exit(EXIT_FAILURE);
}
for (row = 0; row < ROWS; row++) {
    for (col = 0; col < COLS; col++) {
        fprintf(outfile, "%c", trans[picdata[row][col]]);
    }
    fputc('\n', outfile); 
}
if (fclose(outfile) != 0) {
    fprintf(stderr, "Error closing file %s.\n", argv[2]);
    exit(EXIT_FAILURE);
}
return 0;

}

0 ответов

Другие вопросы по тегам