[英]How to fix “Not all control paths return a value” warning in c++?
[這不是家庭作業,我正在通過Bjarne Stroustrup的書“我自己使用C ++編寫原理和實踐”一書]
我正在嘗試使用向量將一個簡單的程序轉換為1到9的數字到它的字符串等效,反之亦然,使用相同的輸入循環,我的程序似乎大致工作,但我得到一個警告“並非所有控制路徑都返回值“。 我該如何解決這個問題,並考慮到意外的輸入?
而且, while (true)
條件似乎很混亂。 如何調整我的代碼以便為用戶提供手動退出while
循環的選項?
#include "..\std_lib_facilities_revised.h"
vector<string> num_words = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
string print_num()
{
int i = num_words.size();
string s = " ";
if (cin >> i) {
if (i > -1 && i < num_words.size()) {
return num_words[i];
}
}
cin.clear();
if (cin >> s) {
for (int j = 0; j < num_words.size(); ++j) {
if (s == num_words[j]) {
return to_string(j);
}
}
}
}
int main()
{
while (true) {
cout << "Enter a number: ";
cout << print_num() << '\n';
}
}
你只需要在函數結尾處返回一些值,以防所有if條件( if (s == num_words[j])
, if (i > -1 && i < num_words.size())
)不是滿足。
string print_num()
{
int i = num_words.size();
string s = " ";
if (cin >> i) {
if (i > -1 && i < num_words.size()) {
return num_words[i];
}
}
cin.clear();
if (cin >> s) {
for (int j = 0; j < num_words.size(); ++j) {
if (s == num_words[j]) {
return to_string(j);
}
}
}
return "";
}
如果兩個cin >> s
返回false
,則不會cin >> s
任何return
語句。
string print_num()
{
int i = num_words.size();
string s = " ";
string error = "Enter valid input.";
if (cin >> i) {
if (i > -1 && i < num_words.size()) {
return num_words[i];
}
}
cin.clear();
if (cin >> s) {
for (int j = 0; j < num_words.size(); ++j) {
if (s == num_words[j]) {
return to_string(j);
}
}
}
// NO RETURN HERE
}
int main()
{
while (true) {
cout << "Enter a number: ";
cout << print_num() << '\n';
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.