Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2011, 13:22   #1
Script
Новичок
Джуниор
 
Регистрация: 16.07.2011
Сообщений: 2
Сообщение C++ проблема с switch и default

Доброго времени суток!
При написании учебной программы нашлась ошибка, исправить которую я не смог.
Задача. Пользователь набирает на клавиатуре оценки( по одной). Оценки - буквы. Надо посчитать, сколько каких оценок и результат вывести на экран.
Сама программа:
Код:

#include <iostream.h>
#include <conio.h>

main()
{
      int bukva;
      int aCount = 0, bCount = 0, cCount = 0, dCount = 0, eCount = 0;
      
      cout << "This program calculate marks\n" << endl;
      cout << "Tape mark(a,b,c,d,e) or EOF(to finish the program): " << endl;
      
      while ( ( bukva = cin.get() ) != EOF)
      {
            switch (bukva)
            {
                   case 'A': case 'a':
                 ++aCount;
                   break;
                   case 'B': case 'b':
                 ++bCount;
                   break;
                   case 'C': case 'c':
                 ++cCount;
                   break;
                   case 'D': case 'd':
                 ++dCount;
                   break;
                   case 'E': case 'e':
                 ++eCount;
                   break;
                  
                   default:
                   cout << "You tape incorrect letter!" << "\n" << endl;
            break;
                   }
            }
            
      cout << "A marks: " << aCount << "\n" << endl;
      cout << "B marks: " << bCount << "\n" << endl;
      cout << "C marks: " << cCount << "\n" << endl;
      cout << "D marks: " << dCount << "\n" << endl;
      cout << "E marks: " << eCount << "\n" << endl;
      
      getch();
      return 0;
      }
Результат выполнения во вложении.
Вопрос: Почему при правильном вводе всё равно выводится сообщение о неверном вводе(выполняется default), а при неправильном default выполняется 2 раза?
Изображения
Тип файла: jpg выполнение.jpg (91.9 Кб, 68 просмотров)
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Script вне форума Ответить с цитированием
Старый 16.07.2011, 14:25   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Почему при правильном вводе всё равно выводится сообщение о неверном вводе

потому, что ввод криво написан.
cin.get() возвращает все введённые символы, включая символ перевода каретки (Enter).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 16.07.2011, 14:41   #3
Script
Новичок
Джуниор
 
Регистрация: 16.07.2011
Сообщений: 2
По умолчанию

Спасибо, проблема решилась добавлением следующего кода в тело switch
Код:
case '\n': case ' ':
break;
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили "Титаник".
Script вне форума Ответить с цитированием
Старый 16.07.2011, 16:07   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

тут лучше без свича решить, и вместо 5 счетчиков использовать массив.
примерно так
Код:
massiv[bukva-'a']++;
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# switch Sna1L Помощь студентам 2 07.07.2011 15:00
switch G. J. Cezar Общие вопросы C/C++ 2 16.10.2010 14:06
default параметры NieL Общие вопросы Delphi 2 19.12.2008 17:16
Проблема с операторами switch и break htonasral Общие вопросы C/C++ 2 23.09.2008 10:54
Строка DEFAULT Altera Компоненты Delphi 2 07.03.2008 17:12