내 기능을 실행하는 데 문제가 있습니다. 이 프로그램은 3 개의 숫자 그룹이 유효한지 또는 200과 800 사이인지 아닌지를 확인합니다. 심지어 -5와 같은 값이 유효하지 않다고해도 결과는 여전히 유효합니다. 누군가가 문제를 파악하도록 도와 줄 수 있습니까?기능에 대한 잘못된 메시지 받기
-1
A
답변
2
bool 변수를 초기화하지 않으므로 정의되지 않은 동작이 실행되고 있습니다.
C 및 C++에서 표현식은 0으로 평가 될 때 "거짓"으로 간주됩니다. 그렇지 않으면 true로 간주됩니다. 무슨 일이 일어나고 무엇
if (!0)
std::cout << "!0 is true" << std::endl;
if (3)
std::cout << "3 is true" << std::endl;
if (255)
std::cout << "255 is true" << std::endl;
프로그램이 ansa
, ansb
및 스택에 ansc
을위한 공간을 할당된다는 점이다. 이러한 위치가 이전 함수 호출에서 프로그램에 의해 이미 사용 된 경우 'true'로 평가되는 0이 아닌 값을 가질 수 있습니다.
당신은 기본적으로 false로 다음을 설정해야합니다
bool ansa = false, ansb = false, ansc = false, overall = false;
또는 당신이 그들의 조건의합니다 ('다른 사람'의 경우를 충족되지 찾을 때 당신은 그들에게 "거짓"의 값을 할당하셔야합니다 테스트) : - 그룹이 유효하려면 즉, 세 가지 변수가 유효해야합니다 또한
bool isitavalidgroup (int a, int b, int c)
{
bool ansa, ansb, ansc, overall;
if ((a <= 800) && (a >= 200)){
ansa = true;
}
else {
cout << a << " is invalid" << endl;
ansa = false;
}
if ((b <= 800) && (b >= 200)) {
ansb = true;
}
else {
cout << b << " is invalid" << endl;
ansb = false;
}
if ((c <= 800) && (c >= 200)) {
ansc = true;
}
else {
cout << c << " is invalid" << endl;
ansc = false;
}
if (ansa && ansb && ansc == true){
overall = true;
}
else {
overall = false;
}
return overall;
}
, 당신은 "단락"논리를 사용하도록 코드를 다시 작성할 수 있습니다. 유효하지 않은 것이 있으면 즉시 그 그룹이 더 이상 유효하지 않다는 것을 알게됩니다. 따라서 처음 오류가 발생했을 때 오류를 발견하면 오류를 모두 반환합니다.
if (a && b && c)
"는과"는 "& &"수단 a
이 false 인 경우, 그래서 조건이 true가 될 수 없습니다, 그래서 가서 b
및 c
도에 해당하는 경우 알아낼 할 이유가 없다.
bool isItAValidGroup(int a, int b, int c)
{
if (a < 200 || a > 800) {
cout << a << " is invalid" << endl;
return false;
}
if (b < 200 || b > 800) {
cout << b << " is invalid" << endl;
return false;
}
if (c < 200 || c > 800) {
cout << c << " is invalid" << endl;
return false;
}
// everything passed.
return true;
}
1
ansa, ansb 또는 ansc를 초기화하지 않았습니다. 조건문에서 명시 적으로 true로 설정하지만 false로 설정하지는 마십시오. 따라서이 값은 정의되지 않으며 0으로 초기화되지 않는 한 true로 간주됩니다.
관련 문제
- 1. Skype4Py 메시지 받기
- 2. 정규식 유효성 확인에 대한 특정 메시지 받기
- 3. 노드에서 여권에 대한 잘못된 요청 받기 노드
- 4. 잘못된 iPhone 응용 프로그램에 대한 알림 받기
- 5. 목록으로 MSMQ 메시지 받기
- 6. satellizer로 계속 잘못된 요청 받기
- 7. 토픽 처음부터 메시지 받기
- 8. 채팅에서 보류중인 메시지 받기
- 9. 잘못된 구문 받기
- 10. 잘못된 SOAP 응답 받기
- 11. Javamail, 메시지 본문 받기
- 12. xbee : 인터럽트에서 메시지 받기
- 13. 다른 프로세스에서 메시지 받기
- 14. 오류 메시지 받기
- 15. UITextField에서 오류 메시지 받기
- 16. xmmp에서 메시지 받기
- 17. 분할 메시지 받기
- 18. Twillio에서 MMS 메시지 받기
- 19. JSON.stringify 오류 메시지 받기
- 20. AngularJs + Strophe.js 메시지 받기
- 21. 동일한 메시지 받기
- 22. PHP로 XMPP 메시지 받기
- 23. ASSERT_THROW에서 예외 메시지 받기
- 24. IObservable에서 최신 메시지 받기
- 25. 다른 창에서 메시지 받기
- 26. POP3 메시지 다시 받기
- 27. 라이브 Log4J 메시지 받기
- 28. msgrcv 비어있는 메시지 받기
- 29. PduRequest에서 짧은 메시지 받기
- 30. WhatsApp 메시지 받기