5 / 5 / 1
Регистрация: 09.09.2012
Сообщений: 227
1

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

24.09.2012, 21:14. Показов 837. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.09.2012, 21:14
Ответы с готовыми решениями:

Не могу понять как написать
Доброго времени суток. Не мог бы кто помочь в написании программ: 1. Определить имеет ли...

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

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

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

7
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
24.09.2012, 21:15 2
C++
1
2
default:
    ...
1
574 / 557 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:22 3
Цитата Сообщение от NoMasters Посмотреть сообщение
C++
1
2
default:
    ...
Это же невалидный месяц отбросит, а не день.
0
5 / 5 / 1
Регистрация: 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
574 / 557 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:36 5
default относится к тому, что стоит внутри switch, т.е. к month. иначе говоря, день ты так не проверишь
1
5 / 5 / 1
Регистрация: 09.09.2012
Сообщений: 227
24.09.2012, 21:39  [ТС] 6
Да, теперь вижу.
Как быть?
0
574 / 557 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:43 7
Сделай отдельную функцию, там запрашивай у пользователя день.Проверку на корректность делай через while (как у тебя на 12 строке). Как только пользователь введет валидный день - возвращай его из функции.
А в case просто вызывай эту функцию.
1
5 / 5 / 1
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2012, 22:00
Помогаю со студенческими работами здесь

Не могу понять как написать каскадную рекурсию
Для заданного одномерного массива A из N элементов найти значение минимального элемента массива и...

Как написать параллакс панораму не могу понять
https://vr.google.com/daydream/ как делать паралакс я понимаю Но как написать паралакс панораму...

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

Циклы и функции,не могу понять как правильно написать
Вот задание: #include &lt;iostream&gt; using namespace std; int mod_1(int n){ int count = 0;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru