Ошибка в 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д