2017-10-04 3 views
0

電話番号に変換された文字を入力するようにプログラムを呼び出そうとしています(これはうまくいきます)。同じ手順を繰り返します(ここではエラーが発生しています)。プログラムは電話番号を集計し、ユーザーにcin >>リピート文字を入力させずにただちにcoutステートメントを生成します。ループ機能が機能と組み合わされている問題がある

"あなたは電話番号を入力したいと思います:Y/N"

は、 "有効な入力を入力してください:Y/Nを"

私はコードの中で見るように、2つの間にcin >>を持っています。どのようにこれを得るための任意のアドバイスですか?前もって感謝します。

#include <iostream> 
#include <string> 

using namespace std; 

void telephoneConverter(); 
int counter; 
char phoneNumber; 

int main() 
{ 
char repeat; 



telephoneConverter(); 

cout << endl 
    << "Would you like to enter a phone 
number: Y/N "; 
    cin >> repeat; 
if (repeat == 'Y' || repeat == 'y') { 

    telephoneConverter(); 
} 
if (repeat == 'N' || repeat == 'n') { 
    cout << "Have a good day."; 
} 
else 
    cout << "Please enter a valid input: Y/N."; 

return 0; 
} 

void telephoneConverter() 
{ 

cout << "\nEnter a phone number in letters 
only." 
    << endl; 

for (counter = 0; counter < 7; counter++) { 
    cin >> phoneNumber; 

    if (counter == 3) 
     cout << "-"; 

    if ((phoneNumber >= 'A' && phoneNumber 
<= 'Z') 
     || (phoneNumber >= 'a' && phoneNumber 
<= 'z')) 
     switch (phoneNumber) { 
     case 'A': 
     case 'a': 
     case 'B': 
     case 'b': 
     case 'C': 
     case 'c': 
      cout << 2; 
      break; 
     case 'D': 
     case 'd': 
     case 'E': 
     case 'e': 
     case 'F': 
     case 'f': 
      cout << 3; 
      break; 
     case 'G': 
     case 'g': 
     case 'H': 
     case 'h': 
     case 'I': 
     case 'i': 
      cout << 4; 
      break; 

     case 'J': 
     case 'j': 
     case 'K': 
     case 'k': 
     case 'L': 
     case 'l': 
      cout << 5; 
      break; 
     case 'M': 
     case 'm': 
     case 'N': 
     case 'n': 
     case 'O': 
     case 'o': 
      cout << 6; 
      break; 
     case 'P': 
     case 'p': 
     case 'Q': 
     case 'q': 
     case 'R': 
     case 'r': 
     case 'S': 
     case 's': 
      cout << 7; 
      break; 

     case 'T': 
     case 't': 
     case 'U': 
     case 'u': 
     case 'V': 
     case 'v': 
      cout << 8; 
      break; 

     case 'W': 
     case 'w': 
     case 'X': 
     case 'x': 
     case 'Y': 
     case 'y': 
     case 'Z': 
     case 'z': 
      cout << 9; 
      break; 
     } 
} 
}; 
+0

... – Drop

+0

:までcinストリーム内の任意の文字を無視(および含む)/スキップ、repeatに読み込む前に新しい行をこの問題を回避するには 'repeat 'を1回だけ入力し、それが' Y'ならば別の数を行いますが、 'repeat'をもう一度求めないでください。だからあなたが 'N'に対してテストを受けるとき、値は' Y'であり、拒否されます。 –

+0

はい、私もそれを変更しました。それを指摘してくれてありがとう。 –

答えて

0

私は、新しい行がcinストリームに残されるような、あなたが「入力」を押して電話番号を入力することにコミットするとします。この新しい行は、すぐにcin >> repeatによって消費されます。しかし切り替える

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
cin >> repeat; 

そして#include <limits>が含ま...

+0

は意味がありますが、提供したコードはいくつかのエラーを投げ捨てています。 https://pastebin.com/QCNitjV5 –

+0

Ooops - コピー/貼り付けの問題。 'input'を' cin'に置き換えてください... –

関連する問題