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

Не работает switch - C++

Восстановить пароль Регистрация
 
S_kepti_k
11 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 32
06.08.2014, 17:25     Не работает switch #1
Помогите пожалуйста разобраться. Есть код, все полотно писать не буду, это часть функции класса. Компилируется все нормально, консоль открывается, когда я пытаюсь ввести буквы,
C++
1
case:
не понимает, что я символы ввожу, постоянно выдает сообщение после
C++
1
default:
"Not grade". char grade; объявлен как символы, хотя как int он тоже должен был работать, поскольку символы могут храниться в любом целом типе, и представляются однобайтовые целые.В чем проблема? Спасибо.

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
void Book :: vvod ()
{
    char grade;
    cout << "Enter grade: \n";
    cout << "EOF - exit. \n";
    while ((grade =cin.get()) != EOF)
    {
        switch (grade)
        {
        case 'A':
        case 'a':
            aCours++;
            break;
        case 'B':
        case 'b':
            bCours++;
            break;
        case 'C':
        case 'c':
            cCours++;
            break;
        case 'D':
        case 'd':
            dCours++;
            break;
        case 'F':
        case 'f':
            cCours++;
            break;
        case '\t':
        case ' ':
        case '\n':
        default:
            cout << "Not grade \n";
            break;
        }
    }
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2014, 17:25     Не работает switch
Посмотрите здесь:

C++ Switch
Почему при выборе switch у меня не работает вывод дерева на экран?! C++
Не работает операция switch-case C++
Не работает switch =( C++
C++ Problem - switch - не работает break
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimabubyakin
 Аватар для dimabubyakin
158 / 123 / 44
Регистрация: 16.10.2013
Сообщений: 1,731
Завершенные тесты: 5
06.08.2014, 17:43     Не работает switch #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
while (true)
    {
        cin>>grade;
        
        switch (grade)
        {
        case 'A':
        case 'a':
            aCours++;
            break;
        case 'B':
        case 'b':
            bCours++;
            break;
        case 'C':
        case 'c':
            cCours++;
            break;
        case 'D':
        case 'd':
            dCours++;
            break;
        case 'F':
        case 'f':
            cCours++;
            break;
        case '\t':
        case ' ':
        case '\n':
        default:
            cout << "Not grade \n";
            break;
        }
    }
Проблема здесь..
Цитата Сообщение от S_kepti_k Посмотреть сообщение
C++
1
while ((grade =cin.get()) != EOF)
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,231
06.08.2014, 18:05     Не работает switch #3
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
void Book :: vvod ()
{
    char grade = 1;
    cout << "Enter grade: \n";
   while (grade != ' ')
    {
     cin >> grade;
        switch (grade)
        {
        case 'A':
        case 'a':
            aCours++;
            break;
        case 'B':
        case 'b':
            bCours++;
            break;
        case 'C':
        case 'c':
            cCours++;
            break;
        case 'D':
        case 'd':
            dCours++;
            break;
        case 'F':
        case 'f':
            cCours++;
            break;
        default:
            cout << "Not grade \n";
            break;
        }
    }
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
06.08.2014, 18:36     Не работает switch #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Это потому, что он дважды проходит за один ввод. Чистите буфер после свича:
C++
1
2
3
4
5
6
7
8
while (...)
{
   switch(...)
   {
      ...
   }
   cin.sync();
}
-=ЮрА=-
Заблокирован
Автор FAQ
06.08.2014, 22:22     Не работает switch #5
S_kepti_k, всё очень просто - произведи замену завершающего символа (ввод окончится по нажатию Enter )
Цитата Сообщение от S_kepti_k Посмотреть сообщение
while ((grade =cin.get()) != '\n')
http://codepad.org/7MmnJ6Bk

Добавлено через 1 минуту

Не по теме:

ЗЫ:

Цитата Сообщение от BumerangSP Посмотреть сообщение
cin.sync();
- не потребуется если отстроится от '\n'

Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.08.2014, 22:28     Не работает switch #6
Ну и свитч тут не нужен:
C++
1
2
3
4
int cours[5] = {0};
unsigned index = std::tolower(grade) - 'a';
if( index < 5 ) ++cours[index];
else std::cout << "Not grade \n";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2014, 01:26     Не работает switch
Еще ссылки по теме:

Switch. Почему не работает? VC++ Studio 2010 C++
C++ Не работает Switch
C++ Как работает оператор switch?

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

Или воспользуйтесь поиском по форуму:
S_kepti_k
11 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 32
07.08.2014, 01:26  [ТС]     Не работает switch #7
dimabubyakin Спасибо за совет - работает, а именно с
C++
1
while ((grade =cin.get()) != EOF)
такой записью можно, что-то сделать, чтоб корректно работало? А все я понял, BumerangSP ниже отписал как сделать.

rikimaru2013 Спасибо. Хотел просто именно с EOF написать, видимо не судьба.

BumerangSP Спасибо, попробую.

-=ЮрА=- Спасибо. Я понял.

Tulosba Спасибо.

Добавлено через 6 минут
dimabubyakin rikimaru2013 BumerangSP -=ЮрА=- Tulosba Всем спасибо за советы. Замечания учел, поправил, работает. Нужный ответ нашел.
Yandex
Объявления
07.08.2014, 01:26     Не работает switch
Ответ Создать тему
Опции темы

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