#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]);
}