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

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

Проблема:

  1. После запроса количества целых чисел, которые они хотели бы ввести, например: 4 числа, цикл повторяется 5 раз, по существу, принимая 5 чисел. Он также печатает "Далее: " после 2-го числа.

  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 = &sum;

  //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 это выход.

Другие вопросы по тегам