使用cout并平均错误或错误

时间:2017-01-14 18:37:47

标签: c++ syntax cout dev-c++

我使用Dev c ++ 5.5.3编写了一些程序。其中一个程序是关于获取一些数字(整数)直到零,然后打印max,min,avg。在我的电脑里一切都很好。在别人的计算机上,它没有显示正确的平均值,它显示非常奇怪的数字4.612521 e + 8并且像这样。我定义一个变量avg并计算该值然后打印它。另一个在调用cout时直接计算平均值。可以有人检查这个程序: 程序1没有显示正确的答案:

#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int n;
int max , min , count = 0 , s;
float avg;
cout<<"This program gets some numbers until zero and then prints maximum, minimum and average of them"<<endl<<"Please enter a number : ";
cin>> n;
max = n;
min = n;
while (n!= 0)
{
    count ++;
    s+=n;
    if (n>max)
    {
        max = n;
    }
    if (n<min)
    {
        min = n;
    }
    cout<< "Please enter a number : ";
    cin>>n;
}
cout<<"ZERO DETECTED!\n\n"<<endl;
cout<<"Maximum: "<<max<<endl;
cout<<"Minimum: "<<min<<endl;
avg = (float) s/count ;
cout<<"Average: "<<avg<<endl; // NOTE NOTE NOTE NOTE
return 0;
}

计划2显示正确答案:

#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int n;
int max , min , count = 0 , s;
float avg;
cout<<"This program gets some numbers until zero and then prints maximum, minimum and average of them"<<endl<<"Please enter a number : ";
cin>> n;
max = n;
min = n;
while (n!= 0)
{
    count ++;
    s+=n;
    if (n>max)
    {
        max = n;
    }
    if (n<min)
    {
        min = n;
    }
    cout<< "Please enter a number : ";
    cin>>n;
}
cout<<"ZERO DETECTED!\n\n"<<endl;
cout<<"Maximum: "<<max<<endl;
cout<<"Minimum: "<<min<<endl;
//avg = (float) s/count ;
cout<<"Average: "<<(float) s/count<<endl; //NOTE NOTE NOTE NOTE
return 0;
}

1 个答案:

答案 0 :(得分:2)

这两个程序都有未定义的行为,因为s未初始化,并且在您第一次尝试读取之前尚未分配值:

int max , min , count = 0 , s;
     

[...]

s+=n;

您所看到的所有行为以及它显然&#34;工作的事实&#34;在你的电脑上,并且没有工作&#34;在其他人身上或多或少是随机发生的。

这是一个简单的解决方法:

int max , min , count = 0 , s = 0;

请注意,您的编译器应该警告您关于未初始化的变量。如果没有,那么也许您应该选择更高的警告级别。

另请注意,您的程序中存在许多其他缺陷,例如使用using namespace std,您在同一行声明了多个变量,或者您的某些变量名称不是很具描述性。< / p>