如果带有字符串的语句不起作用

时间:2016-02-28 03:46:43

标签: c++

void listgames()
{
    using namespace std;
    newLine();
    cout << " [Albert] Would you like to open [League] [Osu] [Pandora] [Google] [Youtube] ?" << endl << endl;
    string game;
    cout << " ";
    cin >> game;
    for (int l = 0; game[l] != '\0'; l++)
    {
        game[l] = toupper(game[0]);
    }
    if (game.compare("LEAGUE"))
    {
        ShellExecute(NULL, "open", "C:\\Users\\Admin\\Desktop\\League\\league.lnk", NULL, NULL, SW_SHOWNORMAL);
        std::cout << " [Albert] [Reminder] Don't forget to focus and try your best, but most importantly have fun!" << std::endl;
    }
    if (game.compare("OSU"))
    {
        ShellExecute(NULL, "open", "C:\\Users\\Admin\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\osu!", NULL, NULL, SW_SHOWNORMAL);
        std::cout << " [Albert] Good luck!!";
    }

不工作.... = /

我正在尝试输入他们想要开始的游戏,并检查他们是否选择了某个游戏...

但无论我输入什么输入,两个游戏都会打开。

2 个答案:

答案 0 :(得分:1)

如果两个字符串相等,

compare将返回0。如果要将等式评估为true,则应该执行

!string.compare(other)

string.compare(other) == 0

这还有另一个问题。在for循环中,您将字符串中的每个字符设置为第一个字符的大写字母。

正如詹姆斯所说,如果你想要大写你需要改变的字符串

game[l] = toupper(game[0]);

game[l] = toupper(game[l]);

答案 1 :(得分:0)

如果两个字符串相等,

compare将返回0。你的字符串永远不会相等(进一步解释),所以它总是返回非零。任何非零都会转换为布尔值true,因此两个if条件总是会运行。

使用==

if (game == "LEAGUE")

正如评论中所提到的,game[l] = toupper(game[0])正在将字符串中的每个字符设置为第一个字母的大写版本。将0替换为l

`game[l] = toupper(game[l])`

或者如果您想使用该库,请将循环替换为:

std::for_each(game.begin(), game.end(), [](char& c){ c = std::toupper(c); } );