Попытка сканирования, но не может получить доступ к значению, если не введено другое - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь динамически инициализировать массив, но когда я вхожу в цикл while, первый раз printf печатает оператор, но следующий оператор printf не выполняется, пока я не введу другое значение.Я хочу поместить значения между

0--->n-1

Первый раз printf оператор выполняется, но второй раз не выполняется, пока я не введу какое-либо значение.попытался ввести 5 для размера, и поставить 0,1,2,3,4 для значений.

  #include <stdio.h>
   #include <malloc.h>
void main() {
    Ex5();
    system("pause");
}

void Ex5()
{
    int size_a,n_res=0,res=0;
    int *arr_a = input_array_dyn(&size_a);
         res = includes(arr_a, size_a);
         printf("res is %d ", res);
         free(arr_a);
    }


int* input_array_dyn(int *size) {
    int i=0, *p_to_arr;
    printf("enter size of arr:");
    scanf_s("%d", size);
    p_to_arr = (int*)calloc(*size,sizeof(int));
    while(i<*size) {
        printf("enter %d element", i);
        scanf_s(" %d ", &p_to_arr[i]);
        i++;
    }
    return p_to_arr;
}

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Строка формата в

scanf_s(" %d ", &p_to_arr[i]);

является проблематичной и может быть причиной вашей проблемы.

Проблема со строкой формата - конечный пробел.Конечный пробел означает, что scanf_s будет читать все символы пробела, пока не останется больше пробелов.Проблема в том, что для того, чтобы scanf_s знал, что больше нет пробелов, вы должны ввести какой-то непробельный ввод.

Это приводит к блокировке scanf_s до тех пор, пока вы не напишите второй ввод.

Решение состоит в том, чтобы вообще не иметь пробелов в строке формата:

scanf_s("%d", &p_to_arr[i]);

Также не требуется начальный пробел, поскольку спецификатор "%d" автоматически пропускает начальный пробел.

0 голосов
/ 31 января 2019

Если я вас правильно понимаю, изменение формата второго scanf на "%d" должно помочь.Я проверил это локально и могу ввести все значения сразу.

...