Предположим, у вас есть файл с именем «input.txt», который выглядел так:Чтение сетки из текстового файла и сохранение ее в двухмерном массиве?
5
0 0 0 0 0
0 0 0 0 0
0 1 1 1 0
0 0 0 0 0
0 0 0 0 0
5 х 5 сетки выше. И вы хотели сохранить сетку 5 x 5 в двумерный массив C. Моя проблема - чтение файла в эту сетку.
Это мой C-файл, который считывает данные, сохраняет их в 2D целого массива и выводит его содержимое
int main (int argc){
FILE *fp;
char ch;
int **C; //Our 2D Array
char filenamein[] = "input.txt";
fp = fopen(filenamein,"r");
N = (ch = fgetc(fp)) - 48;
//Initialize Grid, set all cells to 0
C = malloc(N * sizeof(int *));
for (i = 0; i < N; i++) {
C[i] = malloc(N * sizeof(int));
}
for (i=0;i<N;i++) {
for (j=0;j<N;j++) {
C[i][j]=0;
}
}
//Read array, store into array
while ((ch = fgetc(fp)) != EOF)
{
for (i=0;i<N;i++){
for (j=0;j<N;j++){
C[i][j] = ch - 48;
}
}
}
//Print 2D Array:
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%d ", C[i][j]);
printf("\n");
}
fclose(fp);
}
После вызова этого я получаю:
-38 -38 -38 -38 -38
-38 -38 -38 -38 -38
-38 -38 -38 -38 -38
-38 -38 -38 -38 -38
-38 -38 -38 -38 -38
Сетка выводит char-to-decimal ASCII-код для Whitespace/NULL из того, что я вычитал, поэтому моя проблема читается в текстовом файле в массиве.
Как я могу прочитать текстовый файл для хранения чисел в массиве?
Почему вы используете 'fgetc' вместо' fscanf'? когда вы используете fgetc, вы читаете символ пробела, поэтому вам нужно игнорировать их в части построения сетки. –
Существует очень мало того, что можно получить, называя fgetc() 'и преобразовывая значения ASCII в числа. Диск-доступ является узким местом здесь, а не преобразованием символов. Просто используйте 'scanf()' для ввода данных в виде десятичных чисел. (Кроме того, 'fgetc()' возвращает целое число, поэтому 'while ((ch = fgetc (fp))! = EOF)' может катастрофически потерпеть неудачу). –
Также есть ошибка в вашей инициирующей сетке части, вы каждый раз заполняйте всю свою сетку новым символом чтения. –