2015-02-07 1 views
0

저는 처음 C++ 프로그래머이며이 프로그램은 제 두 번째 프로그램입니다 ... 달러와 유로 간 간단한 계산기입니다. 내가 가진 문제는 NaN 값을 넣으면 그렇게 말하고 다시 묻지 만 종료한다는 것입니다. 누군가가 다른 유형을 입력 할 때까지 기다리는 방법을 아는 사람이 있습니까? 또한 두 번째 cin >> user_dollar에서 "오버로드 된 함수에 대한 참조를 확인할 수 없습니다. 그것을 부르는 것을 의미 했습니까? "이것은 너무 길고 감사합니다. 죄송합니다.NaN 입력을받은 후 C++ 프로그램에서 입력을 다시 묻습니다.

다음은 제 코드입니다. 내 MacBook Pro에서 Xcode를 사용하고 있습니다.

#include <iostream> 
using namespace std; 


int main() { 
    string choice; 
    int user_dollar; 
    int user_euro; 

    cout << "Dollars to Euros (type ‘Dollars’) or Euros to dollars (type ‘Euros’)? "; 
    cin >> choice; 

    if (choice == "Dollars" || choice == "dollars") { 

     cout << "Enter dollar amount: "; 
     cin >> user_dollar; 
      if (isdigit(user_dollar) != true){ 
       cout << "That’s not a number... " << endl; 
       cout << "Enter dollar amount: " << endl; 
       *cin >> user_dollar;* 
       } 
      else { 
       cout << "That is " << user_dollar/1.13 << " Euros." << endl; 
       } 

    } 

    else if (choice == "Euros" || choice == "euros") { 

     cout << "Enter Euro amount: "; 
     cin >> user_euro; 

     cout << "That is " << user_euro * 0.89 << " dollars." << endl; 

    } 
} 
+0

1. 프로그램에 루프가 없습니다. 뭔가 '사실'이라고 물어보기를 원합니다. 2.'std :: isdigit'에 대한 스펙을 읽으십시오. – philipxy

+0

안녕하세요, 귀하의 빠른 답장을 보내 주셔서 감사합니다! 'if '대신'while '을 넣으면 "That is a number ..."와 "dollar amount 입력 :"이 끝없이 인쇄됩니다. 또한'std :: isdigit'이 의미하는 것이 확실하지 않습니다 ... – Minnow

+0

1. 언제 멈출 지 결정하십시오. 그 동안 반복하지 마라. (루프 안에서 당신이하고 싶은 일을하십시오. 맨 아래에 다음 테스트를 할 준비가되어 있는지 확인하십시오.) 2. isnan (x)는 x! = x는 x가 NaN임을 의미합니다. std :: isnan을 사용하여 다시 검색하십시오. 3. std :: isdigit을 사용하여 검색하십시오. 4. std :: cin을 사용하여 다시 검색하십시오. 그것이 무엇인지 모르는 한 함수를 호출하지 마십시오. 그렇지 않으면 왜 그것을 부르는거야? (수사학) – philipxy

답변

0

당신은 cin의 두 번째 사용하기 전에 cin 버퍼를 플래시 할 필요가있다.

cin.clear(); 
cin.ignore(INT_MAX,'\n'); 
cin >> user_dollar; 

같은 뭔가 버퍼를 플러시에 대한 자세한 내용은이 thread를 살펴 보자.

0

user_dollar 변수의 유형은 int이므로 정수 만 저장할 수 있습니다. 누군가 다른 숫자 (예 : "hi")를 입력하면 user_dollar에 저장할 수 없습니다.

cin >> user_dollar으로 전화를 걸고 사용자가 번호를 입력하면 실패하고 user_dollar을 변경하지 않습니다. 이 시점에서 다른 사람이 user_dollar을 설정했기 때문에 아무 것도 할 수 없습니다. 현재 isdigit()으로 그 쓰레기를 확인하고 있습니다. 그리고 isdigit()cin을 사용하여 직접 읽은 정수를 검사하지 않습니다.

fail()을 호출하여 번호를 읽지 못했는지 확인하고 오류가 있었는지를 다시 설정하려면 clear()을 사용하고 이고르가 표시하는대로 을 사용하면 버퍼를 플러시 할 수 있습니다.

philipxy가 말한 것처럼 while 루프를 사용하면 번호를 읽을 때까지 계속 질문 할 수 있습니다.

관련 문제