неожиданно не все пути управления возвращают значение? - PullRequest
1 голос
/ 21 апреля 2020

В настоящее время я пишу программу на C ++ и создал функцию parseText. Когда я запускаю эту функцию, я получаю предупреждение «Не все пути управления возвращают значение», однако, посмотрев этот код несколько раз, я не могу понять, почему это происходит. Это неправильная ошибка или я что-то пропустил.

int parseText(std::string line, std::string *posResponses) {
    for (int x = 0; x < line.length(); x++) {
        line.at(x) = toupper(line.at(x));
    }
    if (line == "HELP") {
        runHelp(3);
        return 0;           //returns 0 if user entered invalid response and needs to repeat the code
    }else if (line == "QUIT") {
        return 2;           //returns 2 if user wants to quit 
    }
    if (posResponses->size() == 1 && posResponses[0] == line) {
        return 1;           //returns 1 if there was a valid response               
    }else if (posResponses[0] == "int") {
        int x = posResponses[1].size();
        for (int i = 0; i <= x; i++) {
            if (posResponses[1].at(i) < 48 || posResponses[1].at(i) > 57) {
                return 0;   //returns 0 if user entered invalid response and needs to repeat the code
            }
            return 1;       //returns 1 if there was a valid response
        }
    }
    else{
        int x = posResponses->size();
        for (int i = 0; i <= x; i++) {
            if (posResponses[i] == line) {
                return 1;   //returns 1 if there was a valid response
            }
        }
        return 0;           //returns 0 if user entered invalid response and needs to repeat the code
    }
}

1 Ответ

1 голос
/ 21 апреля 2020

В этой if ветви

} else if (posResponses[0] == "int") {
    int x = posResponses[1].size();
    for (int i = 0; i <= x; i++) {
        if (posResponses[1].at(i) < 48 || posResponses[1].at(i) > 57) {
            return 0;   //returns 0 if user entered invalid response and needs to repeat the code
        }
        return 1;       //returns 1 if there was a valid response
    }
}

Если x присвоено значение < 0, то for l oop вообще не будет введено, тогда нет * Инструкция 1008 * для этой ветви.

Возможно, вы уверены, что x не будет минусом во время выполнения, но компилятор должен подтвердить это для всех ветвей во время компиляции.

Я не уверен в ваших намерениях, возможно, вы захотите

} else if (posResponses[0] == "int") {
    if (posResponses[1].size() == 0 || posResponses[1].at(0) < 48 || posResponses[1].at(0) > 57) {
        return 0;   //returns 0 if user entered invalid response and needs to repeat the code
    }
    return 1;       //returns 1 if there was a valid response
}
...