在尝试返回字符串时获取垃圾

时间:2014-11-25 05:41:24

标签: c++ string switch-statement return-value return-type

我知道,我可能是个白痴。这可能是重复的,但对于我的生活,我找了一个多小时后找不到答案。我想我不知道怎么用短语搜索。我想要的是能够根据用户输入从函数中打印出一个字符串。这不是我现在正在构建的程序的一部分,但它说明了我的问题。

#include "../std_lib_facilities.h"

string make_name()
{
    string name;
    int selection;
    cout << "Enter 1 steve. Enter 2 Mike.\n\n";
    cin >> selection;

    if (selection == '1')
        name = "Steve";
    else if (selection == '2')
        name = "Mike";

    return name;
}

int main()
{
    cout << "Make a name\n";
    make_name();
    cout << "Your name is " << make_name;
    keep_window_open();
}

而不是打印迈克或史蒂夫,它打印废话。我一直在研究我的程序的所有其他部分,但现在这是我唯一的问题。所以,躺在我身边。我做错了什么?

2 个答案:

答案 0 :(得分:0)

这是因为

if (selection == '1')

这里你要比较一个int和char。这意味着&#39; 1&#39;将是此字符的ASCII值,不是1。

正确的条件陈述应该是: -

if (selection == 1)

答案 1 :(得分:0)

你打印垃圾的原因是因为在main的这一行:

cout << "Your name is " << make_name;

您打印出'make_name'函数的地址,而不是调用它的结果。

修复方法是捕获调用函数的结果并将其打印出来:

int main()
{
    cout << "Make a name\n";
    string name = make_name();
    cout << "Your name is " << name;
    keep_window_open();
}

另一个潜在问题是你的'make_name'函数内部,你的两个条件:

if (selection == '1')
    name = "Steve";
else if (selection == '2')
    name = "Mike";

您将'selection'(一个int)与ASCII字符1和2进行比较,这不是您想要的。

将其更改为:

if (selection == 1)
    name = "Steve";
else if (selection == 2)
    name = "Mike";

你应该得到想要的结果。

注意:另外,考虑将'selection'变量初始化为0.如果有人要输入“hello”而不是数字,那么应该可以防止意外结果。