如何在函数中使用 cin
How to use cin inside a function?
我是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;
}
}
你必须调用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;
}
}
string D1(string Original)
应该string D1(string& Original)
(即:通过引用(
和
string D1(Decision1);
main
应该是
D1(Decision1);
因为
string D1(Decision1);
实际上声明了一个名为 D1
(与函数同名(的新字符串变量,并使用 Decision1
的值对其进行初始化
此语句
string D1(Decision1);
是名称为 D1
的类型为 std::string
的对象的定义,由对象 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
{
//...
}
附言在评论中,有人推荐了《编程——使用C++的原则和实践》一书。我不建议初学者阅读这本书。事实上,对于初学者来说,这是一本糟糕的书。你会花很多时间阅读这本书,但你对C++的了解将接近于零。
string D1(string Original)
现在,程序将复制您传递的字符串并将其放入 Original
,因此当您退出函数时,Decision1
不会发生任何事情。
您希望它做的是通过引用传递变量。
通过引用传递变量意味着该函数接收的不是传递的内容的副本,而是您传递的实际变量(想象一个巫毒娃娃(。您对函数中的变量执行的任何操作都将对传递的变量生效。
将函数标头更改为:
string D1(string &Original)
- C++中的cin.ignore()函数不适用于整个流
- C++输入流.与 cin unget() 函数有点混淆
- 如何在C++中将 cin 设置为类的成员函数?
- 如何将 std::cin 作为函数的参数传递?
- cin.get()函数在C 中
- 如何使用std::cin函数后修复从文件读取的问题
- Cin和Cout在构造函数中
- 如何将 cin 传递给函数
- 与 CIN 一起使用的 getline() 函数
- CIN.IGNORE删除第一个字符的第二次函数被调用
- 将GoogleTest与通过STD :: CIN从用户输入的函数一起使用
- 运行时对cin函数的混淆
- cin函数是否添加了在输入结束时终止的null
- CIN函数不显示本地回声
- 使用cin函数
- 未知类型的 CIN >>函数模板参数
- 使用 CIN 函数在 C++ 中输入数学运算
- 挣扎与cin函数c++
- 在循环中使用cin函数有问题
- 关于cin函数到一个对象的所有公共成员