2013-10-09 2 views
1

여기 아주 간단한 문제 : 잘못된 데이터 입력을 테스트 할 때 오류 메시지가 표시되지만 -1. # IND 이후에 오류 메시지가 표시됩니까?C++ 출력에서 ​​"-1. # IND"를 받습니까?

예를 들어 나는 긍정적이 있어야 할 곳에 부정적인를 입력하고 난

#include "Header.h" 

void error_rep(){ 
cout<<"Wrong input dummy"; 
} 

double ctok(double c){ 
double j = c *273.15; 
if (j >= -273.15){ 
return j; 
} 
else 
    error_rep(); 
} 

int main(){ 
double c = 0; 
cin >> c; 

    double k = ctok(c); 
    cout<<k<<endl; 


keep_window_open(); 
} 

이 무슨 뜻 이죠 "잘못된 입력 더미-1. #의 IND"를 얻을? 왜 그렇게 오르는거야? 어떻게 제거합니까?

+0

경고 수준을 높입니다. – chris

+0

(j <273.15)의 경우 반환 값이 명시 적으로 설정되지 않았으므로 예기치 않은 반환 값을 얻을 수 있습니다. – thang

+1

ctok가 double을 반환하지만 else 경로가 double을 반환하지 않습니다. – taocp

답변

1

를 참조

double ctok(double c){ 
double j = c *273.15; 
if (j >= -273.15){ 
    return j; 
} 
else { 
    error_rep(); 
     ///here 
     throw ;//somthing 
} 

}

시도 -ctok 호출과 관련된 예외 상황을 catch하십시오.

+0

아, 이것은 내가 무엇을했는지입니다. 고맙습니다! – RavenEye

2

이것은 무엇을 의미합니까?

"숫자가 아닙니다."는 Microsoft입니다. k은 유효한 부동 소수점 숫자가 아닙니다.

왜 그렇습니까?

범위 테스트가 실패하면 값을 반환하지 않습니다. 이렇게하면 정의되지 않은 동작이 발생합니다. 실제로는 쓰레기가 될 가능성이있는 uninitalised 값을 반환하는 것과 같습니다. 적절한 경고가 활성화 된 경우 컴파일러에서 경고해야합니다.

어떻게 제거하나요?

예외를 throw하여 오류를보고했습니다. 함수가 실패하면 아무 것도 유효하지 않은 반환 값을 사용하려고 시도 할 수 없습니다. 또는 테스트 할 수있는 "유효하지 않은"상태 (예 : boost::optional<double> 또는 std::pair<double, bool>)의 유형을 반환하고 사용하기 전에 테스트 할 수 있습니다.

그건 그렇고, 섭씨 온도를 켈빈으로 바꾸면 273.15를 더하고 싶습니다. 전환 후 0과 비교하십시오 (또는 변환 전 273.15로 원하는 경우).

관련 문제