簡體   English   中英

如何在c ++中修復“並非所有控制路徑返回值”警告?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM