Ошибка в while и switch-case - C (СИ)
Формулировка задачи:
Привет всем) Пробовал написать простенькую программу, используя цикл while и switch-case. Не могу понять почему, но при выборе любого значения, которое предусмотрено в case, каким-то образом срабатывает одновременно и default (вылазит его значение: "You get a mistake. Please, choose again!"). Если отключить цикл while, то всё работает как надо.
С языком Си знаком чуть более суток. Очень прошу помощи! Заранее спасибо.
p.s. Очень буду рад любым замечаниям)
Листинг программы
- #include <stdio.h>
- int main()
- {
- char c;
- char e;
- int done;
- float total=0;
- printf("Please, make your choice:\n\n");
- printf("1 - Cola\t2$\n\n");
- printf("2 - Nuts\t1$\n\n");
- printf("3 - Cheaps\t3$\n\n");
- printf("4 - Girls\t100$\n\n");
- printf("0 - Finish and pay\n\n");
- printf("Please, write your choice:");
- done=0;
- while(done!=1)
- {
- c=getchar();
- switch(c)
- {
- case '1':
- printf("\nCola\t$2\n");
- total+=2;
- printf("Now your total sum is %.3f$\n",total);
- printf("Something else?\n");
- break;
- case'2':
- printf("\nNuts\t$1\n");
- total+=1;
- printf("Now your total sum is %.3f$\n",total);
- printf("Something else?\n");
- break;
- case '3':
- printf("\nCheaps\t$3\n");
- total+=3;
- printf("Now your total sum is %.3f$\n",total);
- printf("Something else?\n");
- break;
- case '4':
- printf("\nSex\t$100\n");
- total+=100;
- printf("Now your total sum is %.3f$\n",total);
- printf("Something else?\n");
- break;
- case '0':
- printf("\nThe total sum is %.3f$.\n",total);
- done=1;
- break;
- default:
- printf("You got a mistake. Please, choose again!");
- }
- }
- getch();
- return(0);
- }
Решение задачи: «Ошибка в while и switch-case»
textual
Листинг программы
- #include <stdio.h>
- int main()
- {
- int c = 0;
- double total = 0.0;
- printf("Please, make your choice:\n\n");
- printf("1 - Cola\t2$\n\n");
- printf("2 - Nuts\t1$\n\n");
- printf("3 - Cheaps\t3$\n\n");
- printf("4 - Girls\t100$\n\n");
- printf("0 - Finish and pay\n\n");
- printf("Please, write your choice:");
- while ((c = getchar()) != '0')
- {
- switch (c)
- {
- case '1':
- {
- printf("\nCola\t$2\n");
- total += 2;
- printf("Now your total sum is %.3f$\n",total);
- printf("Something else?\n");
- break;
- }
- case'2':
- {
- printf("\nNuts\t$1\n");
- total += 1;
- printf("Now your total sum is %.3f$\n",total);
- printf("Something else?\n");
- break;
- }
- case '3':
- {
- printf("\nCheaps\t$3\n");
- total += 3;
- printf("Now your total sum is %.3f$\n",total);
- printf("Something else?\n");
- break;
- }
- case '4':
- {
- printf("\nSex\t$100\n");
- total += 100;
- printf("Now your total sum is %.3f$\n",total);
- printf("Something else?\n");
- break;
- }
- case '0':
- {
- printf("\nThe total sum is %.3f$.\n",total);
- break;
- }
- case '\r':
- case '\n':
- {
- // Do nothing !
- break;
- }
- default:
- {
- printf("You got a mistake. Please, choose again!");
- }
- }
- }
- return 0;
- }
Объяснение кода листинга программы
- В начале программы объявлены две переменные: c (целое число) и total (число с плавающей точкой). Значение переменной c будет использоваться в операторе switch для определения выбора пользователя, а переменная total используется для подсчета общей суммы.
- Затем программа выводит сообщение с предложением пользователю сделать выбор и призывает его ввести свой выбор.
- В цикле while происходит следующее: программа получает ввод пользователя (это может быть любой символ), преобразует этот символ в верхний регистр и сравнивает его с '0'. Если символ не равен '0', то программа переходит к оператору switch.
- В операторе switch программа проверяет значение переменной c. Если оно равно '1', то программа выводит сообщение
Cola 2$
, добавляет 2 к переменной total и спрашивает пользователя, хочет ли он что-то еще. То же самое происходит для значений '2', '3' и '4'. Если значение переменной c равно '0', то программа выводит сообщениеThe total sum is 0.00$.
и завершает цикл. - Если значение переменной c равно '\r' или '\n' (это символы новой строки, которые появляются, когда пользователь нажимает Enter), то программа ничего не делает.
- Если значение переменной c не равно ни одному из вышеуказанных значений, то программа выводит сообщение
You got a mistake. Please, choose again!
- В конце программы возвращается значение 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д