Обусловленный ввод с массивами

#arrays #c #loops

#массивы #c #циклы

Вопрос:

У меня есть этот код, и я хочу, чтобы он повторно запрашивал пользователя о вводе числа, и я хочу, чтобы каждое число сохранялось в массиве, пока пользователь не введет 0, а затем распечатал результат, но, похоже, это не работает

Я также хотел бы добавить, что я не пытаюсь использовать указатели. Это назначение требует, чтобы мы делали это без указателей.

это мой код:

 printf("Enter your commandsn");
int input;

int commandArray[10];

    for (size_t i =0; i < 10; i  )
    {
        if (scanf("%d", amp;input) != 0)
        {
            break;
        }
        else
        {
            scanf("%d", amp;input);
            commandArray[i] = input;
        }
    }


for(size_t i = 0; i < 10; i  )
{
    printf("%dn", commandArray[i]);
}
 

Это тот результат, который я хочу

(Пользователь вводит): 1 4 5 3 6 0 (чтобы остановить добавление элементов в массив)

(Программа показывает элементы в массиве):

1 4 5 3 6

Комментарии:

1. if (scanf("%d", amp;input) != 0) — Я не думаю, что он делает то, что вы намеревались сделать. Пожалуйста, ознакомьтесь с возвращаемым значением scanf , это не введенное значение.

2. Вы хотите if( scanf(...) != 1 ) или if( input == 0 )

3. Да, вы были правы, я виноват; исправил это сейчас, но он по-прежнему не работает, просто продолжает позволять мне вводить числа даже после того, как я нажал 0. @WilliamPursell

4. Потому что вы не проверяете, что входные данные равны нулю.

5. В вашем цикле вы вызываете scanf и считываете значение. Если это чтение было успешным, вы затем отбрасываете это значение и считываете другое. Вероятно, вы не собираетесь отбрасывать все остальные входные данные.

Ответ №1:

scanf не возвращает прочитанное значение, оно просто сохраняет его во входной переменной.

Кроме того, когда вы печатаете массив в конце, вы всегда печатаете полный массив, даже если пользователь добавил менее 10 чисел, вы должны сохранить размер массива в другой переменной.

Наконец, вы должны остановить цикл, когда ввод равен 0, а не когда он отличается.

Это рабочий код

 printf("Enter your commandsn");
int input;

int commandArray[10];
int size = 0;

    for (size_t i =0; i < 10; i  )
    {
        
        size = i;
        scanf("%d", amp;input);
        
        if (input == 0)
        {
            break;
        }
        else
        {
            commandArray[i] = input;
        }
    }


for(size_t i = 0; i < size; i  )
{
    printf("%dn", commandArray[i]);
}