如何在函数内使用cin?

时间:2014-07-31 19:28:09

标签: c++ 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;
    }
}

4 个答案:

答案 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)