我是c ++的新手,我正在尝试制作一个简单的基于文本的游戏。假设下面的代码 欢迎用户加入游戏并询问用户是否想要开始游戏。我没有得到任何构建错误,但是当我运行它时,它显示的是一个空白屏幕。我究竟做错了什么?
以下代码:
string D1(string Original)
{
cin >> Original;
return Original;
}
int main ()
{
string Decision1;
cout << "Welcome to [game name]" << endl;
cout << "Would you like to start the game?" << endl;
cout << "Yes/No" << endl;
string D1(Decision1);
system("cls");
if (Decision1 == "Yes")
{
cout << "this happens" << endl;
}
else if (Decision1 == "No")
{
cout << "that happens" << endl;
}
}
答案 0 :(得分:7)
您必须致电D1
,而不是创建名为D1
的新变量:
std::string D1()
{
std::string Original;
std::cin >> Original;
return Original;
}
int main ()
{
std::cout << "Welcome to [game name]" << std::endl;
std::cout << "Would you like to start the game?" << std::endl;
std::cout << "Yes/No" << std::endl;
auto Decision1 = D1();
system("cls");
if (Decision1 == "Yes")
{
std::cout << "this happens" << std::endl;
}
else if (Decision1 == "No")
{
std::cout << "that happens" << std::endl;
}
}
答案 1 :(得分:6)
string D1(string Original)
应为string D1(string& Original)
(即:通过参考传递)
和
string D1(Decision1);
中的 main
应为
D1(Decision1);
因为
string D1(Decision1);
实际上声明了一个名为D1
的新字符串变量(与函数同名),并使用Decision1
答案 2 :(得分:3)
本声明
string D1(Decision1);
是std::string
类型的对象的定义,其名称为D1
,由对象Decision1
初始化。由于对象Decision1
为空,因此对象D1为空。
您的意思是以下
void D1( string &Original )
{
cin >> Original;
}
//...
D1( Decision1 );
或以下
string D1()
{
string Original;
cin >> Original;
return Original;
}
//...
Decision1 = D1();
考虑到如果你使用两个if语句
if (Decision1 == "Yes")
{
cout << "this happens" << endl;
}
else if (Decision1 == "No")
{
cout << "that happens" << endl;
}
然后你必须用else
添加第三个语句,因为用户既不能输入“是”也不能输入“否”。您还应该独立于其大小写(大写或小写)来比较字符串。所以你必须将字符串转换为一些常见的情况。
例如
#include <cctype>
//...
for ( char &c : Decision1 ) c = std::toupper( c );
if ( Decision1 == "YES" )
{
cout << "this happens" << endl;
}
else if ( Decision1 == "NO" )
{
cout << "that happens" << endl;
}
else
{
//...
}
P.S。在评论中有人提出了“编程 - 使用C ++的原理和实践”一书。我不建议初学者使用本书。事实上,这对初学者来说是一本糟糕的书。你将花很多时间阅读这本书,但你对C ++的了解将接近于零。
答案 3 :(得分:2)
string D1(string Original)
现在,该程序将复制您传递的字符串并将其放入Original
,因此当您退出该函数时,Decision1
不会发生任何事情。
您希望它做的是pass the variable by reference。
通过引用传递变量意味着函数不会接收传递的内容的副本,而是传递的实际变量(想象一个巫毒娃娃)。您对函数中的变量所做的任何操作都将对传递的变量生效。
将功能标题更改为:
string D1(string &Original)