如何在函数中使用 cin

How to use cin inside a function?

本文关键字:cin 函数      更新时间:2023-10-16

我是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)