Ошибка в 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, что означает успешное выполнение программы.