2017-10-04 26 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' ... –