打印错误的值

时间:2018-09-20 12:51:29

标签: c++

我正在尝试构建一个程序,以输出我输入的人数和平均年龄。这是我的代码

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int age;
    int total = 0;
    int No_of_People = 0;

    while (age != -1){
        total = total + age;
        No_of_People++;

        cout << "Enter a person's age or enter -1 to stop\n";
        cin >> age;
    }

    cout << "Number of people entered:\n" <<No_of_People<< endl;
    cout << "Average age of people = "<< total/No_of_People;

    return 0;
}

但是计算机平均打印错误,有人知道我做错了吗? 这是输出

enter image description here

4 个答案:

答案 0 :(得分:1)

我在您的代码中看到两个主要问题:首先,age未初始化。读取它会导致未定义的行为(如UnholySheep所述)。一切都可能发生,从某些看似随机的值到访问冲突。我曾经忘记初始化一个布尔变量,每次我运行程序时(如我预期的那样),该变量在我的计算机上都用false进行了初始化,而在另一个团队成员中,它被初始化为true,我们想知道为什么它对我有用,但对他不起作用。因此,最好像对total一样,将其初始化为0。

第二,您要在知道age的值之前在total上添加age。因此,当一开始将age设置为0时,与增加总年龄相比,增加的人数将增加一倍。要求输入值后,将total添加到-1

第三件事是,您没有适当地照顾-1。即使输入了$mydata = array('dataset_data' => (array('limit' => null, 'transform' => null, 'column_index' => null, 'column_names' => array ('Name1','Name2', 'Name3', 'Name4', 'Name6', 'Name6', 'Age','Birthday'), 'start_date' => '2006-08-28', 'end_date' => '2018-08-24', 'frequency' => 'daily', 'data' => array() ))); ,您也在增加人数。您应该在增加人数或将其添加到总数之前检查该值。

答案 1 :(得分:0)

只是想我会添加TobiasBrösamle的答案。

未初始化age的一个很好的暗示可能是使用相同的输入值多次运行该程序会产生不同的结果。

答案 2 :(得分:0)

看看这些修改,注释突出显示已更改的代码。

大多数情况下,我是您是编码方面的初学者,您的错误可以归因于未完全开发出“有效的方法论”,即始终初始化变量。我还将代码移到一个单独的函数中,每当我将测试代码放入主函数中时,它很快就会发展为需要执行此操作的地方。

#include <string>
#include <iostream>

using namespace std;

void age()
{
    int age = 0;  // not initalised
    int total = 0;
    int count = -1; // naming convention of previous variable didn't match other variables

    do // loop terminates at bottom
    {               
        cout << "Enter a person's age or enter 0 to stop\n"; // why \n here instead of endl?
        cin >> age;

        total += age;
        count++;
    } while (age > 0); // slightly easier code to write if 0 terminates instead of -1

    cout << "Number of people entered:\n" << count << endl;
    cout << "Average age of people = " << total / (float)count; // floating point result
}

int main()
{
    age();

    char temp;
    cin >> temp;
}

答案 3 :(得分:-1)

您应该复制代码

cout << "Enter a person's age or enter -1 to stop\n";
cin >> age;

在while循环之前。