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

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

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

Привет всем) Пробовал написать простенькую программу, используя цикл while и switch-case. Не могу понять почему, но при выборе любого значения, которое предусмотрено в case, каким-то образом срабатывает одновременно и default (вылазит его значение: "You get a mistake. Please, choose again!"). Если отключить цикл while, то всё работает как надо.
Листинг программы
  1. #include <stdio.h>
  2. int main()
  3. {
  4. char c;
  5. char e;
  6. int done;
  7. float total=0;
  8. printf("Please, make your choice:\n\n");
  9. printf("1 - Cola\t2$\n\n");
  10. printf("2 - Nuts\t1$\n\n");
  11. printf("3 - Cheaps\t3$\n\n");
  12. printf("4 - Girls\t100$\n\n");
  13. printf("0 - Finish and pay\n\n");
  14. printf("Please, write your choice:");
  15. done=0;
  16. while(done!=1)
  17. {
  18. c=getchar();
  19. switch(c)
  20. {
  21. case '1':
  22. printf("\nCola\t$2\n");
  23. total+=2;
  24. printf("Now your total sum is %.3f$\n",total);
  25. printf("Something else?\n");
  26. break;
  27. case'2':
  28. printf("\nNuts\t$1\n");
  29. total+=1;
  30. printf("Now your total sum is %.3f$\n",total);
  31. printf("Something else?\n");
  32. break;
  33. case '3':
  34. printf("\nCheaps\t$3\n");
  35. total+=3;
  36. printf("Now your total sum is %.3f$\n",total);
  37. printf("Something else?\n");
  38. break;
  39. case '4':
  40. printf("\nSex\t$100\n");
  41. total+=100;
  42. printf("Now your total sum is %.3f$\n",total);
  43. printf("Something else?\n");
  44. break;
  45. case '0':
  46. printf("\nThe total sum is %.3f$.\n",total);
  47. done=1;
  48. break;
  49. default:
  50. printf("You got a mistake. Please, choose again!");
  51. }
  52. }
  53. getch();
  54. return(0);
  55. }
С языком Си знаком чуть более суток. Очень прошу помощи! Заранее спасибо. p.s. Очень буду рад любым замечаниям)

Решение задачи: «Ошибка в while и switch-case»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int      c = 0;
  6.    double   total = 0.0;
  7.  
  8.    printf("Please, make your choice:\n\n");
  9.    printf("1 - Cola\t2$\n\n");
  10.    printf("2 - Nuts\t1$\n\n");
  11.    printf("3 - Cheaps\t3$\n\n");
  12.    printf("4 - Girls\t100$\n\n");
  13.    printf("0 - Finish and pay\n\n");
  14.    printf("Please, write your choice:");
  15.  
  16.    while ((c = getchar()) != '0')
  17.    {
  18.       switch (c)
  19.       {
  20.          case '1':
  21.          {
  22.             printf("\nCola\t$2\n");
  23.             total += 2;
  24.             printf("Now your total sum is %.3f$\n",total);
  25.             printf("Something else?\n");
  26.             break;
  27.          }
  28.          case'2':
  29.          {
  30.             printf("\nNuts\t$1\n");
  31.             total += 1;
  32.             printf("Now your total sum is %.3f$\n",total);
  33.             printf("Something else?\n");
  34.             break;
  35.          }
  36.          case '3':
  37.          {
  38.             printf("\nCheaps\t$3\n");
  39.             total += 3;
  40.             printf("Now your total sum is %.3f$\n",total);
  41.             printf("Something else?\n");
  42.             break;
  43.          }
  44.          case '4':
  45.          {
  46.             printf("\nSex\t$100\n");
  47.             total += 100;
  48.             printf("Now your total sum is %.3f$\n",total);
  49.             printf("Something else?\n");
  50.             break;
  51.          }
  52.          case '0':
  53.          {
  54.             printf("\nThe total sum is %.3f$.\n",total);
  55.             break;
  56.          }
  57.          case '\r':
  58.          case '\n':
  59.          {
  60.             // Do nothing !
  61.             break;
  62.          }
  63.          default:
  64.          {
  65.             printf("You got a mistake. Please, choose again!");
  66.          }
  67.       }
  68.    }
  69.    
  70.    return 0;
  71. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут