Мой код перестает работать после первого ввода scanf - PullRequest
0 голосов
/ 30 октября 2019

Я должен написать код, используя ТОЛЬКО 2D указатели, и он должен включать функции для выделения: 1D массив, массив массивов и 2D массив. Однако в функции для чтения массивов она останавливается после первого ввода scanf

В функции «info» (где проблема) я попытался изменить ее на ((A + i) + j), (* (A + I) + j) и ( (A + i) + j). Никто не работал.

#include<stdio.h>
#include<malloc.h>
.
.
.
void allocate1(float *A, int N)
  {
    A=(float*)malloc(N*sizeof(float*));
  }
void allocate2(float **A, int N)
   {
     A=(float**)malloc(N*sizeof(float**));
   }
void allocate(float **A, int M, int N)
   {
      int i;
      allocate2(A,M);
      for(i=0;i<M;i++)
      allocate1(*(A+i),N);
   }
  void info(float **A, int N, int M)
    {
      int i,j;
      for(i=0;i<M;i++)
      for(j=0;j<N;j++)
       {
         printf("input element (%d,%d)\n", i+1,j+1);
         scanf("%f",(*(A+i)+j));
       }
     }
     .
     .
     .
     void main()
      {
        float **A,**B,**C;
         int N,M,P,D;
        do
          {
            M=read();
            N=read();
            D=read();
            P=read();
          }while(D!=N);
         allocate(A,M,N);
         allocate(B,N,P);
         info(A,N,M);
       .
       .

1 Ответ

0 голосов
/ 30 октября 2019

В вопросе не указаны входные данные. Скорее всего, это что-то вроде «1.2 3.4» (или похожее, может быть с новой строкой между числами).

Поскольку код использует «% f» для чтения каждого числа, он не сможет пропуститьпробел / перевод строки (или любой другой разделитель существует). Попробуйте добавить ведущий '' к формату scanf, чтобы пропустить пропуски.

scanf(" %f", &a[i][j]).

Нет необходимости выполнять указатель по математике - пусть компилятор выполняет тяжелую работу.

Примечаниехочу добавить проверку на код возврата scanf. Если это не 1, вы хотите выйти, поскольку это указывает на EOF или другие ошибки синтаксического анализа. В настоящее время в коде нет восстановления / обработки ошибок, лучше быстро потерпеть неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...