Переключатель, не переносящий части ввода?

#c #switch-statement

#c #switch-оператор

Вопрос:

Мое задание для моего класса — преобразовать буквы в цифры из входного файла, например, клавиатуры старого телефона. т.е. ABC равно 2, DEF равно 3 и т.д.

Итак, во входном файле один из входных 1-800-ARID данных.

Используя switch , я смог успешно преобразовать символы в числа, но не могу перенести 1-800 , или, скорее, я не знаю, как это сделать, или если это вообще возможно перенести.

Пока у меня есть это:

 while(input.eof()){
    input.get(ch);
    switch (ch) {
        case 'A': case 'B': case 'C': output << '2'; break;
        case 'D': case 'E': case 'F': output << '3'; break;
        case 'G': case 'H': case 'I': output << '4'; break;
        case 'J': case 'K': case 'L': output << '5'; break;
        case 'M': case 'N': case 'O': output << '6'; break;
        case 'P': case 'Q': case 'R': case 'S': output << '7'; break;
        case 'T': case 'U': case 'V': output << '8'; break;
        case 'W': case 'X': case 'Y': case 'Z': output << '9'; break;
    }
  

Выполнение 1-800-ARID этого возвращает только 2743 , без префикса 1-800 .

Комментарии:

1. switch Будет игнорироваться все, что не является заглавной буквой. Либо добавьте a case '1': '2' … и т. Д.), Либо a default: для обработки других символов.

2. Я не уверен, как реализовать default. Единственный способ, о котором я могу думать, это сделать «1-800-«, но разве это не будет просто печатать 1-800 — каждый раз, когда нет заглавной буквы? @dxiv

3. @learningtocode65 Вы выводите символы один за другим. Итак, если вы видите a '1' , то выведите a '1' . Если вы видите a '-' , то выведите a '-' . Если вы видите ch , то… вы поняли идею.

4. Сделайте так, чтобы регистр по умолчанию просто печатался ch сам.

Ответ №1:

Вы выводите ТОЛЬКО те символы, которые конвертируете, и ничего больше. Просто добавьте default блок к switch блоку, чтобы вывести все остальные символы как есть.

Кроме того, ваше использование input.eof() неверно.

Попробуйте это:

 while (input.get(ch)){ // <— fixed
    switch (ch) {
        case 'A': case 'B': case 'C': output << '2'; break;
        case 'D': case 'E': case 'F': output << '3'; break;
        case 'G': case 'H': case 'I': output << '4'; break;
        case 'J': case 'K': case 'L': output << '5'; break;
        case 'M': case 'N': case 'O': output << '6'; break;
        case 'P': case 'Q': case 'R': case 'S': output << '7'; break;
        case 'T': case 'U': case 'V': output << '8'; break;
        case 'W': case 'X': case 'Y': case 'Z': output << '9'; break;
        default: output << ch; break; // <— add this
    }
}
  

Комментарии:

1. На самом деле я наткнулся на это, просто повозившись с кодом / немного подумав о проблеме. Спасибо. Я все еще новичок на этом сайте, поэтому я не уверен, должен ли я @ you или нет.