Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
16 / 4 / 4
Регистрация: 19.09.2012
Сообщений: 107
1

Не работает switch

06.08.2014, 17:25. Показов 6323. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста разобраться. Есть код, все полотно писать не буду, это часть функции класса. Компилируется все нормально, консоль открывается, когда я пытаюсь ввести буквы,
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;
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2014, 17:25
Ответы с готовыми решениями:

Не работает switch =(
// 3 lab.cpp: определяет точку входа для консольного приложения. // #include &quot;karta.h&quot;...

Не работает switch
Делаю лабораторную по работе с файлами. В начале выбираешь пункт меню, после этого выполняется...

Не работает Switch
//--------------------------------------------------------------------------- #include &quot;stdafx.h&quot;...

_getch() не работает со switch
пишу что то типа змейки, нужно сделать так, чтобы нажимая клавишу, &quot;W&quot; например, пользователь не...

6
161 / 122 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
06.08.2014, 17:43 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)
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
06.08.2014, 18:05 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;
        }
    }
}
1
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
06.08.2014, 18:36 4
Лучший ответ Сообщение было отмечено S_kepti_k как решение

Решение

Это потому, что он дважды проходит за один ввод. Чистите буфер после свича:
C++
1
2
3
4
5
6
7
8
while (...)
{
   switch(...)
   {
      ...
   }
   cin.sync();
}
2
Заблокирован
Автор FAQ
06.08.2014, 22:22 5
S_kepti_k, всё очень просто - произведи замену завершающего символа (ввод окончится по нажатию Enter )
Цитата Сообщение от S_kepti_k Посмотреть сообщение
while ((grade =cin.get()) != '\n')
http://codepad.org/7MmnJ6Bk

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

Не по теме:

ЗЫ:

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

1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.08.2014, 22:28 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";
1
16 / 4 / 4
Регистрация: 19.09.2012
Сообщений: 107
07.08.2014, 01:26  [ТС] 7
dimabubyakin Спасибо за совет - работает, а именно с
C++
1
while ((grade =cin.get()) != EOF)
такой записью можно, что-то сделать, чтоб корректно работало? А все я понял, BumerangSP ниже отписал как сделать.

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

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

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

Tulosba Спасибо.

Добавлено через 6 минут
dimabubyakin rikimaru2013 BumerangSP -=ЮрА=- Tulosba Всем спасибо за советы. Замечания учел, поправил, работает. Нужный ответ нашел.
0
07.08.2014, 01:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2014, 01:26
Помогаю со студенческими работами здесь

Не работает операция switch-case
Программа должна переводить число от 0 до 255 в двоичную систему, побитово декодировать информацию...

Как работает оператор switch?
Shape* generator() { switch(rand() % 3) { case 0: return new Triangle; case 1: return new...

Problem - switch - не работает break
Возникла проблема со switch. Всегда при вводе символа выполняется и case, и default. то ли break не...

Почему не работает ветка в switch ?
Делаю упражнение из четвёртой главы книги &quot;Изучаем С++ через программирование игр&quot; (Майкл...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru