Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
#1

Не могу понять как написать в switch - если значение не действительно - C++

24.09.2012, 21:14. Просмотров 566. Ответов 7
Метки нет (Все метки)

Не могу понять как написать в switch statement "Error - the day you entered is not valid".

Стоит задача:
Написать программу, которая запрашивает значение месяца и дня.
Принимает значения месяца - от 1 до 12.
День от 1 до 28 должен приниматься для февраля (2).
День от 1 до 30 должен приниматься для 4, 6, 9 и 11.
День от 1 до 31 должен приниматься для всех остальных.

Требование: использовать switch statement.

Не могу понять как написать в switch statement "Error - the day you entered is not valid", если значение дня выходит за ограничения.

Вот мой код:


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
72
73
74
75
76
77
78
#include <iostream>
using namespace std;
 
int main( )  
{
    
    int month, day; 
 
    printf("Enter a month between 1 and 12: ");
    scanf("%d", &month);
    
      while (month < 1 || month > 12)
    {
      printf("Error - the month you entered is not valid.\n ");
      printf("Enter a month between 1 and 12: ");
      scanf("%d", &month);     
    }
   do 
   {          
    switch (month)
           {
           case 1:
                printf("Enter a day between 1 and 31: ");
                scanf("%d", &day);
                break;
           case 2:
                printf("Enter a day between 1 and 28: ");
                scanf("%d", &day);
                break;
           case 3:
                printf("Enter a day between 1 and 31: ");
                scanf("%d", &day);
                break;
           case 4:
                printf("Enter a day between 1 and 30: ");
                scanf("%d", &day);
                break;
           case 5:
                printf("Enter a day between 1 and 31: ");
                scanf("%d", &day);
                break;
           case 6:
                printf("Enter a day between 1 and 30: ");
                scanf("%d", &day);
                break;
           case 7:
                printf("Enter a day between 1 and 31: ");
                scanf("%d", &day);
                break;
           case 8:
                printf("Enter a day between 1 and 31: ");
                scanf("%d", &day);
                break;
           case 9:
                printf("Enter a day between 1 and 30: ");
                scanf("%d", &day);
                break;
           case 10:
                printf("Enter a day between 1 and 31: ");
                scanf("%d", &day);
                break;
           case 11:
                printf("Enter a day between 1 and 30: ");
                scanf("%d", &day);
                break;
           case 12:
                printf("Enter a day between 1 and 31: ");
                scanf("%d", &day);
                break;
                }
      } while (day )            
     
      printf("\n The month accepted is %d\n", month);
      printf(" The day accepted is %d\n\n", day);
 
    system ("Pause");
    return 0;   
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2012, 21:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу понять как написать в switch - если значение не действительно (C++):

Не могу понять как написать - C++
Доброго времени суток. Не мог бы кто помочь в написании программ: 1. Определить имеет ли действительные корни уравнение ax2 + bx + c =...

Не могу понять как написать правильно. - C++
Не могу понять как это написать правильно. Оно даже не компилируется. #include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt; ...

Теория вероятностей. Не могу понять как написать на С++ - C++
Определить вероятность того, что в семье имеющей 6 детей не больше 4 девочек. Веpоятность pождения девочки p=0.5, мальчика q=1-p...

Стек на основе массива структур - эт как понять читаю литературу и не могу понять! - C++
Стек статически (на основе массива структур). Пример структура &quot;Товар&quot; которая включает в себя: № по каталогу(ключ), Название, цена, срок...

Как выйти из цикла, если break относится к switch? - C++
Как выйти из цикла в конструкции while(условие) { switch(i) case(!условие): break; default break; }

Не могу понять по тригонометрии как найти ctg(2a - 3pi/2) если cosa = -0,6? - Алгебра
Задача: cosa = -0,6 Найти sin(pi/4 - a) = ? Тут я думаю будет так: sin(pi/4 - a) = cos(-a) = -cosa = 0,6 Но как найти это: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
NoMasters
Псевдослучайный
1754 / 1097 / 72
Регистрация: 13.09.2011
Сообщений: 3,134
24.09.2012, 21:15 #2
C++
1
2
default:
    ...
1
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:22 #3
Цитата Сообщение от NoMasters Посмотреть сообщение
C++
1
2
default:
    ...
Это же невалидный месяц отбросит, а не день.
0
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
24.09.2012, 21:30  [ТС] #4
Спасибо!!!

Почему-то не срабатывает. Что я делаю не так?


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
#include <iostream>
using namespace std;
 
int main( )  
{
    
    int month, day; 
 
    printf("Enter a month between 1 and 12: ");
    scanf("%d", &month);
    
      while (month < 1 || month > 12)
    {
      printf("Error - the month you entered is not valid.\n ");
      printf("Enter a month between 1 and 12: ");
      scanf("%d", &month);     
    }
          
    switch (month)
           {
           case 1:  case 3:  case 5: case 7: case 8: case 10: case 12:
                  printf("Enter a day between 1 and 31: ");
                  scanf("%d", &day);
                break;
           case 2:
                printf("Enter a day between 1 and 28: ");
                scanf("%d", &day);
                break;
           case 4: case 6: case 9: case 11:
                printf("Enter a day between 1 and 30: ");
                scanf("%d", &day);
                break;
          
                default: 
                printf("Error - the day you entered is not valid.");
                }
                 
     
      printf("\n The month accepted is %d\n", month);
      printf(" The day accepted is %d\n\n", day);
 
    system ("Pause");
    return 0;   
}
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:36 #5
default относится к тому, что стоит внутри switch, т.е. к month. иначе говоря, день ты так не проверишь
1
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
24.09.2012, 21:39  [ТС] #6
Да, теперь вижу.
Как быть?
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:43 #7
Сделай отдельную функцию, там запрашивай у пользователя день.Проверку на корректность делай через while (как у тебя на 12 строке). Как только пользователь введет валидный день - возвращай его из функции.
А в case просто вызывай эту функцию.
1
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
24.09.2012, 22:00  [ТС] #8
Не могу понять как в case вызывать функцию - у меня из 3 варианта
Пытаюсь сделать так:
-- после ввода невалидного дня - даже если вводишь валидный пишет - "Error - the day you entered is not valid".

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
#include <iostream>
using namespace std;
 
int main( )  
{
    
    int month, day; 
 
    printf("Enter a month between 1 and 12: ");
    scanf("%d", &month);
    
      while (month < 1 || month > 12)
    {
      printf("Error - the month you entered is not valid.\n ");
      printf("Enter a month between 1 and 12: ");
      scanf("%d", &month);     
    }
    
          
    switch (month)
           {
           case 1:  case 3:  case 5: case 7: case 8: case 10: case 12:
                  printf("Enter a day between 1 and 31: ");
                  scanf("%d", &day);
                  
                    while (day < 1 || day > 31)
                    {
                    printf("\nError - the day you entered is not valid.");
                    printf("\nEnter a day between 1 and 31: ");
                    scanf("%d", &month);     
                    }
                break;
           case 2:
                printf("Enter a day between 1 and 28: ");
                scanf("%d", &day);
                
                 while (day < 1 || day > 28)
                    {
                    printf("\nError - the day you entered is not valid.");
                    printf("\nEnter a day between 1 and 31: ");
                    scanf("%d", &month);     
                    }
                break;
           case 4: case 6: case 9: case 11:
                printf("Enter a day between 1 and 30: ");
                scanf("%d", &day);
                
                while (day < 1 || day > 30)
                    {
                    printf("\nError - the day you entered is not valid.");
                    printf("\nEnter a day between 1 and 31: ");
                    scanf("%d", &month);     
                    }
                break;
     
                }
                 
     
      printf("\n The month accepted is %d\n", month);
      printf(" The day accepted is %d\n\n", day);
 
    system ("Pause");
    return 0;   
}
Добавлено через 7 минут
Sorry, I am so stupid:

C++
1
2
3
4
5
6
while (day < 1 || day > 31)
                    {
                    printf("\nError - the day you entered is not valid.");
                    printf("\nEnter a day between 1 and 31: ");
                    scanf("%d", &day);     
                    }
при копировании scanf("%d", &day); day осталось как month.

Теперь всё работает!!!

Thank you!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2012, 22:00
Привет! Вот еще темы с ответами:

.NET 4.x Switch-case: Не могу понять почему не весь код в методе возвращается - C#
подскажите пожалуйста... Не могу понять почему пишет что не весь код в методе возвращается. Я в каждом кейсе возвращаю созданный...

создал форму для выбора некоторых данных по checkbox не могу понять как написать, вывод инфы - HTML, CSS
&lt;h1&gt; Поиск рецепта по составляющим ингридиентам&lt;/h1&gt; &lt;form method=&quot;post&quot; name=&quot;ProductForm&quot; action=&quot;index.php?id=33&quot;...

Не могу сообразить как написать программу....если можете выручите - C++ Builder
&quot;Даны координаты вершин четырехугольника. Определить, является ли данный четырехугольник параллелограммом.&quot;

Не могу понять в чём дело. Не отображается значение - C#
Привет! Иногда не отображается значение &quot;Полный дом!&quot; и я не знаю почему. Подскажите пожалуйста. Вот: static void Game() ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.09.2012, 22:00
Ответ Создать тему
Опции темы

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