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!!";
}
不工作.... = /
我正在尝试输入他们想要开始的游戏,并检查他们是否选择了某个游戏...
但无论我输入什么输入,两个游戏都会打开。
答案 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); } );