如何修复C ++中的“并非所有控制路径都返回值”警告?

时间:2019-05-13 19:47:43

标签: 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';
    }
}

3 个答案:

答案 0 :(得分:2)

如果不满足所有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 "";
}

答案 1 :(得分:0)

如果两个cin >> s都返回false,则两个return语句都不会被命中。

答案 2 :(得分:-2)

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';
        }
    }