Как прочитать строку как несколько символов, если я не знаю длину последовательности символов?

Извините, если название немного сбивает с толку, я попытаюсь объяснить лучше здесь. Итак, в основном я пытаюсь написать программу, в которой пользователь вводит номер телефона в буквенной форме, а затем переводит его в числовую форму. Как это:

Enter phone number: CALLATT
22555288

Где 2=ABC, 3=DEF, 4=GHI, 5=JKL, 6=MNO, 7=PRS, 8=TUV, 9=WXY

Кроме того, если ввод номера телефона содержит символы, которые не являются алфавитными, их следует оставить как есть. Что значит:

Enter phone number: 1-800-COL-LECT
1-800-265-5328

Теперь я знаю, что это можно очень легко решить с помощью строк и массивов, но я не должен использовать их в этом упражнении. Я написал этот код:

#include <stdio.h>

int main() {
  char two = '2', three = '3', four = '4', five = '5', six = '6',
       seven = '7', eight = '8', nine = '9';
  char num;

  printf("Enter a phone number: ");

  do {
    num = getchar();
    if(num == 'A' || num == 'B' || num == 'C'){
      num = two;
    }
    else if(num == 'D' || num == 'E' || num == 'F'){
      num = three;
    }
    else if(num == 'G' || num == 'H' || num == 'I'){
      num = four;
    }
    else if(num == 'J' || num == 'K' || num == 'L'){
      num = five;
    }
    else if(num == 'M' || num == 'N' || num == 'O'){
      num = six;
    }
    else if(num == 'P' || num == 'R' || num == 'S'){
      num = seven;
    }
    else if(num == 'T' || num == 'U' || num == 'V'){
      num = eight;
    }
    else if(num == 'W' || num == 'X' || num == 'Y'){
      num = nine;
    }
    printf("%c", num);
  }while(getchar() != '\n');

  return 0;
}

Что явно не работает. Я имею в виду, что он отлично работает, если пользователь вводит один символ, но не в том случае, если ввод состоит из более чем одного символа. Я не могу понять это... Я знаю, почему и где мой код неверен, но я не могу найти эффективное решение для решения проблемы без использования массивов.

Любая помощь? Большое спасибо :)


c
person Community    schedule 15.11.2018    source источник
comment
Просто для справки: char num; ==› int num;   -  person pmg    schedule 15.11.2018


Ответы (1)


Пытаться

    int num = getchar();
    do {

        /* your if / else / if train */
        printf("%c", num);

    } while ((num = getchar()) != '\n'); // assign and compare
person pmg    schedule 15.11.2018
comment
Спасибо, что помогло. Итак, в основном, когда я писал, он прослушивал 2 символа одновременно вместо 1, верно? - person ; 15.11.2018
comment
В основном вы тратили 1 символ на каждые два введенных символа. - person pmg; 15.11.2018