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

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

Восстановить пароль Регистрация
 
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
24.09.2012, 21:14     Не могу понять как написать в switch - если значение не действительно #1
Не могу понять как написать в 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;   
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2012, 21:14     Не могу понять как написать в switch - если значение не действительно
Посмотрите здесь:

Не могу понять как написать правильно. C++
Не могу понять, как найти сумму C++
не могу понять как сделать программу C++
Не могу понять как работает программа C++
Не могу понять, как исправить ошибку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
24.09.2012, 21:15     Не могу понять как написать в switch - если значение не действительно #2
C++
1
2
default:
    ...
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:22     Не могу понять как написать в switch - если значение не действительно #3
Цитата Сообщение от NoMasters Посмотреть сообщение
C++
1
2
default:
    ...
Это же невалидный месяц отбросит, а не день.
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
24.09.2012, 21:30  [ТС]     Не могу понять как написать в switch - если значение не действительно #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;   
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:36     Не могу понять как написать в switch - если значение не действительно #5
default относится к тому, что стоит внутри switch, т.е. к month. иначе говоря, день ты так не проверишь
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
24.09.2012, 21:39  [ТС]     Не могу понять как написать в switch - если значение не действительно #6
Да, теперь вижу.
Как быть?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
24.09.2012, 21:43     Не могу понять как написать в switch - если значение не действительно #7
Сделай отдельную функцию, там запрашивай у пользователя день.Проверку на корректность делай через while (как у тебя на 12 строке). Как только пользователь введет валидный день - возвращай его из функции.
А в case просто вызывай эту функцию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2012, 22:00     Не могу понять как написать в switch - если значение не действительно
Еще ссылки по теме:

C++ Не могу понять как передать
C++ Теория вероятностей. Не могу понять как написать на С++
C++ Не могу понять, как работает программа

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

Или воспользуйтесь поиском по форуму:
QWERY_2012
5 / 5 / 2
Регистрация: 09.09.2012
Сообщений: 227
24.09.2012, 22:00  [ТС]     Не могу понять как написать в switch - если значение не действительно #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!!!
Yandex
Объявления
24.09.2012, 22:00     Не могу понять как написать в switch - если значение не действительно
Ответ Создать тему
Опции темы

Текущее время: 15:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru