函数在C ++中返回随机值。找不到问题

时间:2015-10-15 01:15:16

标签: c++

我正在开发一个程序来接受年龄变量的用户输入,然后计算这个人应该进入的等级。我的代码似乎正在运行,并且正在返回正确的值。然而;我也得到两个随机整数以及这些值。我已经好好看了好几遍,但找不到问题。我的代码如下,并按照我的教授设定的可接受程序的标准进行安排,因为这是一项任务:

#include <iostream>
using namespace std;

int gradecalculate (int age)

{

    int grade;

    if (age >= 6 && age <= 17)
    grade= age-5;
    return grade;
    // Program does nothing if # not in range.

}

bool messagereturn (int age)

{

    if (age < 5)
    {cout << "You are too young for school." << endl;}

    else if (age > 17)
    {cout << "You are too old for school." << endl;}

    else
    {cout << "You should be in grade " << gradecalculate (age) << "." << endl;}

}

bool greet (int age)

{

    if (age == 17)
    {cout << "Hello Senior!" << endl;}

}

int main ()

{

    int age;
    cout << "Enter your age: ";
    cin >> age;

    cout << messagereturn (age) << endl;
    cout << greet (age) << endl;

    return 0;

}

当我运行此代码(使用代码块)时,输出如下,我没有收到任何错误代码:

输入17 -

Enter your age: 17
You should be in grade 12.
96
Hello Senior!
96

输入11 -

Enter your age: 11
You should be in grade 6.
96
11

4 个答案:

答案 0 :(得分:0)

您的两个函数bool messagereturn (int age)bool greet (int age)期望返回bool,但您没有return任何内容,这可能是您输出两个随机整数的原因

我不知道您希望从这些函数返回什么,但是这里的代码返回false而不是任何内容:

bool messagereturn (int age)

{

    if (age < 5)
    {cout << "You are too young for school." << endl;}

    else if (age > 17)
    {cout << "You are too old for school." << endl;}

    else
    {cout << "You should be in grade " << gradecalculate (age) << "." << endl;}
    return false;
}

bool greet (int age)

{

    if (age == 17)
    {cout << "Hello Senior!" << endl;}
    return false;
}

此外,在函数int gradecalculate (int age)中,grade变量未初始化,具体取决于age的值。这是您的代码grade初始化为0。

int gradecalculate (int age)

{

    int grade = 0;

    if (age >= 6 && age <= 17)
    grade= age-5;
    return grade;
    // Program does nothing if # not in range.

}

答案 1 :(得分:0)

您的函数greet()messagereturn()被声明为返回bool,但它们什么都不返回,将其声明更改为void greet(int age);void messagereturn(int age)所有打印到cout在这些功能中完成,没有必要这样做:

cout << messagereturn(age) << endl;
cout << greet(age) << endl;

删除cout和endl部分,只需保留函数的调用。

最后

int gradecalculate (int age)
{

    int grade = 0; //initialize grade to something, else you're returning garbage when age < 6 or > 17

    if (age >= 6 && age <= 17)
    grade= age-5;
    return grade;
    // Program does nothing if # not in range.

}

答案 2 :(得分:0)

您的listBox1.DisplayMember = "Item";messagereturn()函数被声明为返回greet()值,但其中没有一个实际返回任何内容,因此值是随机的。由于您要将返回值发送至bool,但函数会直接向std::cout发送自己的消息,因此它们不应返回任何std::cout值。

此外,由于bool仅在5-17岁时被调用,因此无需再次检查gradecalculate()。在某些条件下编写一个没有age值的函数是不好的。

试试这个:

return

或者,您可以将这些功能合并在一起并让它返回#include <iostream> using namespace std; int gradecalculate (int age) { return age-5; } void messagereturn (int age) { if (age < 5) {cout << "You are too young for school." << endl;} else if (age > 17) {cout << "You are too old for school." << endl;} else {cout << "You should be in grade " << gradecalculate (age) << endl;} } void greet (int age) { if (age == 17) {cout << "Hello Senior!" << endl;} } int main () { int age; cout << "Enter your age: "; cin >> age; messagereturn (age); greet (age); return 0; } ,然后发送给std::string

std::cout

答案 3 :(得分:-1)

您无法返回本地变量。你可以在gradecalculate()中做到这一点。

全局声明成绩并将其初始化为0.

此函数还有一个条件,如果你的if语句不成立,你会返回一个未初始化的变量。

messagereturn和greet应该是无效的,而不是bool。

更改

cout << messagereturn (age) << endl;
cout << greet (age) << endl;

messagereturn(年龄);

迎接(年龄);

因为在这些功能中,您已经在使用标准输出,并且功能不会返回任何内容。