Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
mollex
0 / 0 / 1
Регистрация: 27.10.2016
Сообщений: 10
1

Ошибка в while и switch-case

01.11.2016, 00:48. Просмотров 819. Ответов 4
Метки нет (Все метки)

Привет всем) Пробовал написать простенькую программу, используя цикл while и switch-case. Не могу понять почему, но при выборе любого значения, которое предусмотрено в case, каким-то образом срабатывает одновременно и default (вылазит его значение: "You get a mistake. Please, choose again!"). Если отключить цикл while, то всё работает как надо.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#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. Очень буду рад любым замечаниям)
0
Миниатюры
Ошибка в while и switch-case  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2016, 00:48
Ответы с готовыми решениями:

Ошибка в решении. Оператор switch case
Ввести день и месяц, вывести предыдущий день. Помогите ошибку найти в решении. Ругается на 10,16...

Оператор switch-case
Привет всем программистам! Помогите пожалуйста, у меня не получается освоить операторы switch-case...

Задача с оператором switch-case: записать цену прописью
Составьте программу для решения поставленной задачи, используя оператор switch-case. Введенную...

Можно ли в операторе switch в case записать не конкретное значение, а диапазон?
Можно ли в операторе switch в case записать не конкретное значение, а диапазон? Например:...

Минимизации размера кода в типовой схеме с операторами switch / case
Здравствуйте! Для минимизации размера кода прошу помочь как сделать чтобы типовая схема с...

4
gazlan
3162 / 1921 / 312
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
01.11.2016, 01:20 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#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
Миниатюры
Ошибка в while и switch-case  
mollex
0 / 0 / 1
Регистрация: 27.10.2016
Сообщений: 10
01.11.2016, 01:39  [ТС] 3
Спасибо за ответ) Не могли бы Вы мне разъяснить момент с case '0'. Почему при выборе нуля не выполняется функция printf("\nThe total sum is %.3f$.\n",total); ? Просто происходит завершение программы (в Вашем варианте).
И почему C, когда задана через char, а не через int, не работает корректно с while? ведь без while всё работает на ура.
0
gazlan
3162 / 1921 / 312
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
01.11.2016, 01:49 4
Цитата Сообщение от mollex Посмотреть сообщение
момент с case '0'. Почему при нажатии на него не выполняется функция printf()?
Моя вина. Проглядел, что у вас там обработчик - исполнение до него просто не доходит (по условию в while). Либо верните назад bool done = false / true и его проверку, либо (лучше) вынесите этот код за цикл while().

c должно быть int (getchar возвращает int), а "не работает" никак с ним не связано: обратите внимание на обработку конца строки (\r, \n). Заметьте, что компьютер не способен к чтению мыслей и делает только то, что предписано программой.
1
mollex
0 / 0 / 1
Регистрация: 27.10.2016
Сообщений: 10
01.11.2016, 02:02  [ТС] 5
gazlan, большое Вам спасибо за ответ)
0
01.11.2016, 02:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2016, 02:02

Составьте программу для решения поставленной задачи, используя оператор switch - case. (на языке Си)
Составить программу, которая читает натуральное число N в десятичном представлении (N &lt; 10000), а...

Правильно напечатать фразу "Мне k лет" (используя оператор switch - case)
Для целого числа k от 1 до 99 напечатать фразу &quot;Мне k лет&quot;, учитывая при этом, что при некоторых...

Ошибка из-за case
Вот моя программа #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;memory.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru