2017-10-04 23 views
0

試圖讓程序提示用戶輸入將被轉換成電話號碼(這是工作正常)的字母,然後提示用戶,如果他們想重複相同的步驟(這是我遇到錯誤的地方)。該程序轉換電話號碼,然後立即生成cout語句,而不讓用戶輸入cin >>重複字符。有問題得到一個循環與功能相結合

「你想輸入一個電話號碼:Y/N」

「請輸入一個有效的輸入:Y/N」

我有一個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

你只輸入一次'重複',如果是'Y',你可以輸入另一個數字,但不要再次請求重複。所以當你對'N'進行測試時,值仍然是'Y'並被拒絕。 –

+0

是的,我也改變了。謝謝你指出。 –

回答

0

我想你犯了按「Enter」鍵,使得新生產線將在cin流中留下輸入您的手機號碼。這條新生產線將立即被cin >> repeat消耗。 要repeat閱讀之前避免這種情況,請跳過/忽略cin流中的任何字符,直到(包括)新行:

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

,包括#include <limits> ...

+0

是有道理的,但您提供的代碼會拋出幾個錯誤。 https://pastebin.com/QCNitjV5 –

+0

Ooops - 複製/粘貼問題;用'cin'替換'input' ... –