Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2018, 19:03   #1
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
По умолчанию Почему операция goto приводит к такому результату?

Вот часть кода:
Код:
a:
        printf("Введите число, соответствующее желаемой тарифной ставке или действию:\n");
        printf("1)$8.75/ч\t\t2)$9.33/ч\n");
        printf("3)$10.00/ч\t\t4)$11.20/ч\n");
        printf("5)Выход\n");
        while ((ch = getchar()) != '5')
        {
                switch (ch)
                {
                        case '1': wagePerHour = 8.75;
                                  break;
                        case '2': wagePerHour = 9.33;
                                  break;
                        case '3': wagePerHour = 10.00;
                                  break;
                        case '4': wagePerHour = 11.20;
                                  break;
                        default:  printf("Недопустимое значение\n");
                                  goto a;
                }
по условию упражнения при вводе символов от '1' до '4' переменной wagePerHour присваиваются какое-либо значение, при вводе символа '5' программа завершает работу. С этим все в порядке.
А проблема вот в чем: при вводе любого другого символа (скажем '6') программа должна напомнить пользователю допустимые варианты и предложить опять ввести какой-либо символ, что я и попытался сделать с помощью goto. Но она почему-то выводит допустимые варианты дважды. Вот так выглядит выполнение:

Введите число, соответствующее желаемой тарифной ставке или действию:
1)$8.75/ч 2)$9.33/ч
3)$10.00/ч 4)$11.20/ч
5)Выход
6
Недопустимое значение
Введите число, соответствующее желаемой тарифной ставке или действию:
1)$8.75/ч 2)$9.33/ч
3)$10.00/ч 4)$11.20/ч
5)Выход
Недопустимое значение
Введите число, соответствующее желаемой тарифной ставке или действию:
1)$8.75/ч 2)$9.33/ч
3)$10.00/ч 4)$11.20/ч
5)Выход

Подскажите, пожалуйста, в чем дело.
Спасибо.
Sinli вне форума Ответить с цитированием
Старый 18.09.2018, 20:13   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
Сообщение от Sinli Посмотреть сообщение
Подскажите, пожалуйста, в чем дело.
getchar() использует буферизованный ввод.
Чтобы ввелся хоть один символ, нужно нажать на клавишу Enter.
Это приведёт к появлению в буфере символа конца строки.
Именно он вызывает второе сообщение о недопустимом значении
Black Fregat вне форума Ответить с цитированием
Старый 18.09.2018, 21:27   #3
Sinli
Пользователь
 
Регистрация: 10.09.2018
Сообщений: 43
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
getchar() использует буферизованный ввод.
Чтобы ввелся хоть один символ, нужно нажать на клавишу Enter.
Это приведёт к появлению в буфере символа конца строки.
Именно он вызывает второе сообщение о недопустимом значении
Добавил после while:
Код:
if (ch == '\n')
                        continue;
Заработало как надо.
Большое спасибо. Очень полезная информация.
Sinli вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к такому программированию ilyakislitsyn85 Софт 9 04.07.2013 21:53
составить программу по такому алгоритму TRINITI23 Помощь студентам 6 08.03.2011 20:09
как по итоговому результату найти кол-во. Ramis Помощь студентам 0 26.09.2010 11:35
к желаемому результату подставить составляющие 0mega Microsoft Office Excel 5 30.07.2010 09:19
Можно такому идти зарабатывать? Web-Gangsta Свободное общение 5 30.01.2010 11:21