Другая проблема заключается в том, что вы читаете только с scanf("%f", &input);
. Если пользователь вводит что-то, что не может быть интерпретировано как число с плавающей запятой C, например «pi», вызов scanf()
не назначит ничего для input
и не будет прогрессировать оттуда. Это означает, что он будет пытаться продолжать читать «пи» и потерпит неудачу.
С учетом изменения на while(!feof(stdin))
, которое другие авторы рекомендуют правильно, если вы введете «пи», будет бесконечный цикл печати прежнего значения input
и печати приглашения, но программа никогда не будет обработать любой новый ввод.
scanf()
возвращает количество назначений для входных переменных, которые он сделал. Если он не присваивается, это означает, что он не нашел число с плавающей запятой, и вам нужно прочитать больше ввода с чем-то вроде char string[100];scanf("%99s", string);
. Это удалит следующую строку из входного потока (в любом случае, до 99 символов - дополнительный char
предназначен для нулевого терминатора в строке).
Вы знаете, это напоминает мне обо всех причинах, по которым я ненавижу scanf()
, и почему я использую fgets()
вместо этого, а затем, возможно, проанализирую его, используя sscanf()
.