2017-10-04 1 views
0

전화 번호로 변환 할 문자를 입력하라는 프로그램을 얻고 (원하는 경우) 사용자에게 메시지를 표시하려고합니다. 동일한 단계를 반복하십시오 (여기는 오류가 발생하는 곳입니다). 이 프로그램은 전화 번호를 변환 한 다음 사용자가 cin >> repeat 문자를 입력하지 않고 즉시 cout 문을 생성합니다.루프가 작동하는 데 문제가있는 경우

:

는 "Y/N 당신은 전화 번호를 입력 하시겠습니까" "유효한 입력 입력하십시오. Y/N을"

코드에서 볼 수 있듯이 두 가지 사이에 >>가 있습니다. 이 방법을 얻는 방법에 대한 조언이 있으십니까? 미리 감사드립니다.

#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

을 'repeat '를 한 번만 입력하면'Y '이면 다른 번호를 쓰지만 결코'repeat'를 다시 요구하지 않습니다. 따라서 'N'에 대한 테스트를 수행하면 값은 여전히 ​​'Y'이며 거부됩니다. –

+0

네, 저도 바꿨습니다. 그 점을 지적 해 주셔서 감사합니다. –

답변

0

은 당신이 새로운 라인이 cin 스트림에 남아있을 것 같은 것을, "Enter"를 눌러 귀하의 전화 번호를 입력 커밋 가정합니다. 이 새로운 라인은 즉시 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'을 대체하십시오 ... –

관련 문제