почему getchar () хранит повторяющиеся значения в 2d массиве? - PullRequest
0 голосов
/ 25 сентября 2019

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

Я не знаюЯ не знаю, что происходит.

  • Я пытался использовать while ((getchar ())! = '\ n');<- Не помогает </li>
  • Поместите getchar () перед scanf
  • И, наконец, getchar () после scanf, по крайней мере, позволяет мне ввести значение, два вышеперечисленных просто выводят пустой массив

Редактировать 1 - Изменены столбцы с 5 на 6, так как "chux" сказал, что предыдущие значения приводили к внешнему распределению.Редактировать 2 - Прокрутить вниз для поиска рабочего кода и последней ошибки

    char *arr_input(int limit){
        char *p=(char*)malloc(limit*6*sizeof(char)); // Edit 1
        int i=0,j;
        //while ((getchar()) != '\n');
        while(i<limit){
            getchar();
            scanf("%c",&p[i*5+5]);    

            i++;
        }

        arr_display(p,limit);
        return p;
    }
Value at row 0 is = 
Value at row 0 is = 
Value at row 0 is = 
Value at row 0 is = 
Value at row 0 is = 
Value at row 0 is = 1
Value at row 1 is = 1
Value at row 1 is = 
Value at row 1 is = 
Value at row 1 is = 
Value at row 1 is = 
Value at row 1 is = 2
Value at row 2 is = 2
Value at row 2 is = 
Value at row 2 is = 
Value at row 2 is = 
Value at row 2 is = 
Value at row 2 is = 3
Input Verified

Вывод при объявлении с использованием calloc ()

Value at row 0 is = 0
Value at row 0 is = 
Value at row 0 is = 
Value at row 0 is = 
Value at row 0 is = 
Value at row 0 is = 1
Value at row 1 is = 
Value at row 1 is = 0
Value at row 1 is = 
Value at row 1 is = 
Value at row 1 is = 
Value at row 1 is = 2
Value at row 2 is = 
Value at row 2 is = 
Value at row 2 is = 0
Value at row 2 is = 
Value at row 2 is = 
Value at row 2 is = 3

Рабочий код, за исключением того, что calloc () не инициализируется 0значение, поэтому я сделал вручную

    char *arr_input(int limit){
        char *p=(char*)calloc(limit*6,sizeof(char));
        int i=0;
        while(i<limit){
            scanf(" %c",&p[i*6+5]);             
            i++;
        }
        zeroIn(p,limit);
        arr_display(p,limit);
        return p;
    }
    void *zeroIn(char *p ,int limit){
        int i=0,j=0;
        for(i=0;i<limit;i++){
            for(j=0;j<5;j++)
                p[i*6+j]='0';
        }       
            //arr_display(p,limit); 
    }
    char *arr_display(char *disp,int size){
        int i=0,j=0;
        for (i = 0; i <size ;i++)
        {
            for(j=0;j<6;j++){
         printf("Value at row %d is = %c\n",i,disp[i*6+j]);
            }
        }
    }
Value at row 0 is = 0
Value at row 0 is = 0
Value at row 0 is = 0
Value at row 0 is = 0
Value at row 0 is = 0
Value at row 0 is = 1
Value at row 1 is = 0
Value at row 1 is = 0
Value at row 1 is = 0
Value at row 1 is = 0
Value at row 1 is = 0
Value at row 1 is = 2
Value at row 2 is = 0
Value at row 2 is = 0
Value at row 2 is = 0
Value at row 2 is = 0
Value at row 2 is = 0
Value at row 2 is = 3

1 Ответ

0 голосов
/ 25 сентября 2019

Используйте calloc вместо malloc.Так что память будет инициализирована на ноль.

Пожалуйста, не забудьте обновить размер выделения (т. Е. 6) и вычисление индекса до того же числа.Вы выделили 6, но использовали & p [i * 5 + 5].

Вставили два изменения,

char *p=(char*)calloc(limit*6, sizeof(char)); 
scanf("%c",&p[i*6+5]);  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...