Почему моя программа слишком много циклов?

Я новичок в C и пытаюсь создать программу и имею проблему с моей основной функцией.

Проблема:

  1. После запроса количества целых чисел, которые они хотели бы ввести, например: 4 числа, цикл продолжается 5 раз, в основном принимая 5 чисел. Он также печатает только «Next:» после второго номера.

  2. В моем цикле while, который я поставил для проверки ошибок, после того, как пользователь вводит допустимый метод, например: вводит 1, он распечатает, что это «неверный выбор», и повторно повторно запрашивает еще раз.

Код:

 #include  #include #include "a3defs.h" int main() { StackType stk; StackType *stkPtr = &stk; //Will be used to check whether to use recursive or iterative int method = 0; int sum; int *sumPnt = ∑ //Will be used to create array for amount of ints: int numOfIntegers; //Array of ints: int *userInts; printf("How many integers would you like to enter? "); scanf("%d", &numOfIntegers); userInts = (int*)calloc(numOfIntegers, sizeof(int)); //Create the array printf("Please enter %d numbers: \n", numOfIntegers); int i; for (i = 0; i < numOfIntegers; i++) { scanf("%d\n", &userInts[i]); printf("Next:"); } while(1) { printf("Would you like to used iterative or recursive to sum?\n"); printf("Enter 1 for iterative or 2 for recursive: "); scanf("%d\n", &method); if (method == 1) { //found in loop.c sumIterative(stkPtr, numOfIntegers, userInts, sumPnt); break; } else if (method == 2) { //Found in loop.c sumRecursive(stkPtr, numOfIntegers, userInts, sumPnt); break; } else { printf("Invalid choice. Repeating... \n"); continue; } } printf("Your sum is: %d", *sumPnt); return 0; } 

Заменить scanf("%d\n", &userInts[i]); с scanf("%d", &userInts[i]);

См. Это о вводе символа nonwhitespace в спецификаторе формата в scanf.

В нем говорится:

Любой символ, который не является символом пробела (пустой, новой строкой или вкладкой) или частью спецификатора формата (который начинается с символа%), заставляет функцию читать следующий символ из streamа, сравнивать его с этим символом без пробела и если он совпадает, он отбрасывается, и функция продолжает следующий символ формата. Если символ не совпадает, функция не работает, возвращает и оставляет последующие символы streamа непрочитанным.

Задача 1:

Просто замените:

 scanf("%d\n", &userInts[i]); 

by scanf("%d", &userInts[i]);

И добавьте fflush(stdout) после всех операторов printf где строка формата не заканчивается \n . В противном случае вывод будет отображаться только после вывода следующего \n .