C - Мой Scanf никогда не перестает принимать входные данные - PullRequest
0 голосов
/ 20 мая 2018

Итак, я немного возился с циклами, когда думал, что будет хорошей идеей попробовать сделать простой калькулятор факториалов.Это код:

#include <stdio.h>

int main(int argc, char const *argv[])
{   
    int num;
    int ans;

    printf("Enter any number: ");
    scanf("%d", &num);

    ans = num;

    for (int i = (num-1); i = 1; --i)
    {
        ans *= i;

    }
    printf("%d! is %d \n", num, ans);

    return 0;
}

Довольно просто.Моя проблема, однако, в том, что когда мне нужно ввести число, например 5, scanf просто никогда не останавливается.Вместо того, чтобы двигаться вперед с выполнением, он продолжает позволять мне вводить больше чисел после нажатия клавиши ввода.На самом деле это никогда не останавливается, я мог бы часами добавлять цифры, если бы он вообще не работал.Есть идеи, почему это так?

Я проверил проверку стола с 5!и это сработало, но я никак не могу заставить его скомпилироваться.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Это не scanf(), а цикл for, который никогда не останавливается, потому что вы присваиваете 1 для i в условии цикла for:

for (int i = (num-1); i = 1; --i)
                      ^^^^^

for циклоцените условие перед выполнением тела цикла, и условие i = 1 всегда будет иметь значение true.После выполнения тела цикла значение i уменьшается, а затем условие оценивается снова, что присваивает 1 i.Следовательно, цикл завершается бесконечно.

Измените условие цикла for на i > 1:

for (int i = (num-1); i > 1; --i)
0 голосов
/ 20 мая 2018

Это должно работать:

#include <stdio.h>

int main() {
   int num;
   int ans;

   printf("Enter number: ");
   scanf(" %d", &num);

   ans = num;

   for(int i = (num - 1); i > 1; --i)
      ans = ans * i;

   printf("%d! is %d\n", num, ans);

   return 0;
}

Модификации:

  1. Изменено i = 1 на i > 1 для условия цикла.
...