2017-03-27 24 views
1

文字または数字を使用して電話番号を入力できるプログラムを作成しようとしています。文字を使用する場合は、対応する番号を電話機のキーパッドに入力します。しかし、文字が変換されて数字になるのではなく、クラブ、ハート、スペードのようなカードスーツシンボルになります。なぜこれが起こっているのか分かりません。ここで電話ダイヤルプログラム数字の代わりにカードスーツに文字を変換する

#include <iostream> 
#include <cctype> 
using namespace std; 

int read_dials(char &digit1, char &digit2, char &digit3, char &digit4, char &digit5, char &digit6, char &digit7, char &digit8); 
int todigit(char &digit); 
void acknowledge_call(char digit1, char digit2, char digit3, char digit4, char digit5, char digit6, char digit7, char digit8); 


int todigit(char &digit) 
{ 
    int errorCode = 0; 

    switch (digit) 
    { 
     case 1: 
      break; 
     case 2: 
     case 'A': 
     case 'B': 
     case 'C': 
     case 'a': 
     case 'b': 
     case 'c': 
      digit = 2; 
      break; 
     case 3: 
     case 'D': 
     case 'E': 
     case 'F': 
     case 'd': 
     case 'e': 
     case 'f': 
      digit = 3; 
      break; 
     case 4: 
     case 'G': 
     case 'H': 
     case 'I': 
     case 'g': 
     case 'h': 
     case 'i': 
      digit = 4; 
      break; 
     case 5: 
     case 'J': 
     case 'K': 
     case 'L': 
     case 'j': 
     case 'k': 
     case 'l': 
      digit = 5; 
      break; 
     case 6: 
     case 'M': 
     case 'N': 
     case 'O': 
     case 'm': 
     case 'n': 
     case 'o': 
      digit = 6; 
      break; 
     case 7: 
     case 'P': 
     case 'Q': 
     case 'R': 
     case 'S': 
     case 'p': 
     case 'q': 
     case 'r': 
     case 's': 
      digit = 7; 
      break; 
     case 8: 
     case 'T': 
     case 'U': 
     case 'V': 
     case 't': 
     case 'u': 
     case 'v': 
      digit = 8; 
      break; 
     case 9: 
     case 'W': 
     case 'X': 
     case 'Y': 
     case 'Z': 
     case 'w': 
     case 'x': 
     case 'y': 
     case 'z': 
      digit = 9; 
      break; 
    } 
    // nice size switch statemwent 

    return errorCode; 
} 

電話番号を印刷する機能である:

void acknowledge_call(char digit1, char digit2, char digit3, char digit4, char digit5, char digit6, char digit7, char digit8) 
{ 
    cout << "Phone Number Dialed: " << digit1 << digit2 << digit3 << digit4 << digit5 << digit6 << digit7 << digit8; 
} 
+1

どのように番号を印刷していますか?番号を印刷すると、通常はカードスーツにならないため、通常とは異なる方法で印刷する必要があります。 –

+0

私はそれを印刷するために使用している機能を表示するために投稿を編集しました。 – jackofblaze

答えて

0

代わりにCHARデータ型のちょうど整数変数に数字を割り当てるか、ここで変換が起こると想定されている関数でありますASCII値48 + 1 = 49すなわちchar、 '1'を割り当てるchar値に48 + digitを割り当てます。

あなたは

char ch = 'A'; 

を書くとき、あなたのコンパイラが文字「A」を表すために使用する番号にCHの値を設定しています。あなたがしようとしている、あなたのケースでは

char ch = 65; 

:それは通常、任意の数値型と同様に65

は「A」のASCIIコードです、あなたは同じ結果が得られる通常の数でそれを初期化することができますchar変数に2,3、... 9の値を代入し、異なる出力ストリームで異なって表示される相対的なASCII値を表示します。

ASCIIコードの詳細については、以下のリンクを参照してください。 http://en.cppreference.com/w/cpp/language/ascii

0

私はに変換された数字のいずれかの側に単一のアポストロフィを置くことによって、この問題を解決しました。例えば

digit = '2'; 

代わりの

digit = 2; 
関連する問題