我在運行我的功能時遇到問題。該程序應該查看一組3個數字是否有效,只有在200到800之間。即使認爲諸如-5的值是無效的,結果仍然認爲它是有效的。有人能幫我找出問題嗎?功能錯誤消息
Q
功能錯誤消息
-1
A
回答
2
由於您未初始化bool變量,因此您正在運行未定義行爲。
bool ansa, ansb, ansc, overall;
在C和C++中,如果表達式計算爲0,則認爲表達式爲「假」,否則認爲是真。
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
在棧上分配空間。如果這些位置在前面的函數調用中碰巧已被您的程序使用過,則它們可能具有非零值,導致它們評估爲「真」。
您需要設置這些默認是假的:
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;
}
此外,您可以重寫代碼以使用「短路」邏輯 - 也就是說,該組是有效的所有三個變量必須是有效的。如果有人無效,您立即知道該團隊不再有效。所以當你發現你的第一個錯誤情況而不是繼續測試它們時,請返回false。
if (a && b && c)
的「& &」的意思是「也」,所以如果a
是假的,條件不可能是真實的,所以沒有理由去和計算出如果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。因此,它們的值沒有被定義,只要它們沒有被初始化爲零,它們就被認爲是真的。
相關問題
- 1. 錯誤消息與功能融合
- 2. Python的解析錯誤消息功能
- 3. CodeInteger錯誤消息:消息:調用未定義功能link_tag(
- 4. 編譯錯誤,而推廣功能 - 複雜的錯誤消息
- 5. VB功能錯誤信息
- 6. PHP PDO錯誤和成功消息
- 7. 展會的成功或錯誤消息
- 8. Kohana成功/錯誤消息方法
- 9. 成功或錯誤消息在表格
- 10. Drupal:顯示成功/錯誤消息
- 11. 錯誤消息
- 12. 錯誤消息
- 13. 錯誤消息
- 14. 錯誤消息
- 15. 錯誤消息
- 16. 錯誤消息
- 17. 錯誤消息
- 18. 錯誤消息
- 19. 錯誤消息
- 20. 阻止Django消息一次顯示錯誤消息和成功消息
- 21. jQuery的搜索功能每次觸發錯誤消息
- 22. SAP功能模塊的詳細錯誤消息CSAP_MAT_BOM_CREATE
- 23. 過量錯誤消息中的特殊功能
- 24. 使用C#擴展功能的XSLT中的錯誤消息
- 25. Appium中未實現的功能錯誤消息
- 26. Zend的格式錯誤的消息沒有從功能
- 27. 預期的功能/可變錯誤消息
- 28. 從jQuery的。點擊功能奇怪的錯誤消息話題
- 29. AJAX功能齊全,但仍顯示錯誤消息
- 30. 顯示當前功能的自定義錯誤消息