Ошибка в while и switch-case - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Привет всем) Пробовал написать простенькую программу, используя цикл while и switch-case. Не могу понять почему, но при выборе любого значения, которое предусмотрено в case, каким-то образом срабатывает одновременно и default (вылазит его значение: "You get a mistake. Please, choose again!"). Если отключить цикл while, то всё работает как надо.
#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);
    }
С языком Си знаком чуть более суток. Очень прошу помощи! Заранее спасибо. p.s. Очень буду рад любым замечаниям)

Решение задачи: «Ошибка в 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;
}

Объяснение кода листинга программы

  1. В начале программы объявлены две переменные: c (целое число) и total (число с плавающей точкой). Значение переменной c будет использоваться в операторе switch для определения выбора пользователя, а переменная total используется для подсчета общей суммы.
  2. Затем программа выводит сообщение с предложением пользователю сделать выбор и призывает его ввести свой выбор.
  3. В цикле while происходит следующее: программа получает ввод пользователя (это может быть любой символ), преобразует этот символ в верхний регистр и сравнивает его с '0'. Если символ не равен '0', то программа переходит к оператору switch.
  4. В операторе switch программа проверяет значение переменной c. Если оно равно '1', то программа выводит сообщение Cola 2$, добавляет 2 к переменной total и спрашивает пользователя, хочет ли он что-то еще. То же самое происходит для значений '2', '3' и '4'. Если значение переменной c равно '0', то программа выводит сообщение The total sum is 0.00$. и завершает цикл.
  5. Если значение переменной c равно '\r' или '\n' (это символы новой строки, которые появляются, когда пользователь нажимает Enter), то программа ничего не делает.
  6. Если значение переменной c не равно ни одному из вышеуказанных значений, то программа выводит сообщение You got a mistake. Please, choose again!
  7. В конце программы возвращается значение 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.357 из 5