Почему моя программа зацикливается слишком много раз?
Я новичок в C и пытаюсь создать программу, у меня проблемы с основной функцией.
Проблема:
После запроса количества целых чисел, которые они хотели бы ввести, например: 4 числа, цикл повторяется 5 раз, по существу, принимая 5 чисел. Он также печатает "Далее: " после 2-го числа.
В моем
while
Цикл, который я ставлю для проверки ошибок, после того, как пользователь введет допустимый метод, например: вводит 1, он выведет, что это "неправильный выбор", и снова запросит снова только один раз.
Код:
#include <stdio.h>
#include<stdlib.h>
#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;
}
3 ответа
Замещать scanf("%d\n", &userInts[i]);
с scanf("%d", &userInts[i]);
Смотрите это о вводе непробельного символа в спецификаторе формата в scanf.
Это говорит:
Любой символ, который не является ни пробелом (пробел, символ новой строки или табуляции), ни частью спецификатора формата (начинающегося с символа%), заставляет функцию прочитать следующий символ из потока, сравнить его с этим непробельным символом и если это соответствует, это отбрасывается, и функция продолжается со следующим символом формата. Если символ не совпадает, функция завершается ошибкой, возвращая и оставляя последующие символы потока непрочитанными.
Проблема 1:
Просто замените:
scanf("%d\n", &userInts[i]);
от scanf("%d", &userInts[i]);
И добавить fflush(stdout)
в конце концов printf
операторы, где строка формата не заканчивается \n
, В противном случае вывод будет отображаться только после следующего \n
это выход.