Чтение чисел из текстового файла в динамически размещенный двумерный массив - PullRequest
1 голос
/ 24 октября 2011

Прежде всего, я НЕ прошу, чтобы кто-то сделал мою домашнюю работу для меня, просто для помощи с частью, на которой я застрял. Во-вторых, я не эксперт по Си, поэтому, пожалуйста, прости все, что не является стандартной практикой. В-третьих, заранее спасибо за любую помощь =)

Хорошо ...

Мне дают текстовый файл, подобный этому:

4 6
010000
011010
011010
101100

Первые две цифры - это количество строк и количество столбцов.

Я должен прочитать это в динамически размещенный 2d массив, чтобы я мог манипулировать конкретными цифрами в массиве.

Я поместил 4 и 6 в переменные без проблем, а также создал массив и правильно выделил место. Я просто не могу понять, как получить все 0 и 1 в массив. Некоторое время я безуспешно искал.

Мне также не разрешено использовать [] где-либо в моей программе, мы сосредоточены на указателях, поэтому все это должно быть сделано с помощью указателей. Тем не менее, если я смогу получить рабочее решение с пометкой [], я смогу попытаться сделать все указатели позже, но сейчас я не могу найти какой-либо способ работать правильно.

Вот функция, которую я пишу, которая берет уже открытый файл:

 void image(FILE *fp){
     int row =0, col=0, i=0, j=0;
     int **image;

     fscanf(fp, "%d %d", &row, &col); 

     image = (int**) malloc(row*sizeof(int*));

     for (i = 0; i < row; i++){
          *(image+i) = (int*) malloc(col*sizeof(int));

          for(j=0; j< col; j++){
              //TRIED THIS BUT IT DOESNT WORK
               fscanf(fp, "%d", &image[i][j]);                
          }
          printf("%d\n", **(image+i));
     }
 }

Это один из способов, который я попробовал из нескольких других. Как я уже сказал, я хочу сначала найти способ, который использует [], а затем попытаться преобразовать его в указатели. Я бы предпочел, чтобы кто-нибудь мог дать мне совет, потому что я немного растерялся. В любом случае, еще раз спасибо за любую помощь !!!

~ B.

1 Ответ

1 голос
/ 24 октября 2011

Попробуйте:

  for(j = 0; j < col; j++) {
       if (!fscanf(fp, " %c", &image[i][j])) /* Also note the space */
           break;

       image[i][j] -= '0'; /* Or you can go `if (image[i][j] == '0')`.. */
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...