Прежде чем вы пометите мой вопрос как дубликат, я уже изучал подобные вопросы и ответы:
c: Как сигнализировать о конце ввода
Остановить цикл for, когда пользователь закончит ввод данных в c
Согласно приведенным выше ссылочным вопросам, мой код должен быть правильным, но по какой-то причине я не могу заставить его выйти из цикла иначните печатать выходные данные после ввода пользователем int, такого как ноль или минус один.
Для справки, это школьное задание, и мне пока запрещено использовать «fgets», мы ограничены только использованием «scanf»
Я действительно надеюськто-то может указать мне правильное направление здесь.Все, что я пытаюсь сделать, это попросить пользователя ввести неопределенное количество целых и сохранить их в массиве.Я знаю максимально допустимое количество значений, поэтому я использую массив, однако я хочу дать пользователю возможность сигнализировать о конце ввода, вводя ноль или, возможно, минус единицу.Я знаю, что это должно быть очень просто, но я не могу заставить его работать, пока пользователь не введет символ.
Мой код выглядит следующим образом:
int i = 0;
int j = 0;
int full_sequence[200] = {0};
int numElements = 0;
printf("enter sequence of integers: \n");
for (i = 0; i < 200; i++)
{
if (scanf(" %d", &full_sequence[i]) ==0)
break;
//i've also tried setting i to the maximum index instead of using break, neither of which worked;
else
{
scanf(" %d", &full_sequence[i]);
numElements++;
}
}
for (j = 0; j < numElements; j++)
{
printf("\nend of input *********************");
printf("\nArray element %d is: %d", j, full_sequence[j]);
printf("\nthe number of non-zero elements is: %d", numElements);
}
return 0;
Я также пытался заменить цикл for на цикл while и пытался использовать отрицательный в качестве сигнала конца входа какследует:
while (testValue >= 0)
{
scanf("%d", &testValue);
scanf("%d", &full_sequence[i]);
{
i++;
numElements++;
}
Все равно ничего, консоль, похоже, продолжает ожидать ввода, пока я не введу буквенный символ, после чего цикл, наконец, завершается и мой вывод печатается.Как ни странно, функция scanf только захватывает каждый второй номер, который я ввожу.
Если я попытаюсь переписать цикл for, чтобы также использовать тестовое значение для проверки элемента scanf перед добавлением его в мой массив, аналогично тому, как оно было в моем цикле while, это выглядит следующим образом:
for (i = 0; i < 100; i++)
{
scanf("%d", &testValue);
if (testValue == 0)
break;
else
{
scanf("%d", &full_sequence[i]);
numElements++;
}
}
Все равно ничего.