使用 cout 和平均错误或错误
using cout and averages errors or bugs
我使用 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;
}
这两个程序都有 未定义的行为 因为 s
在您第一次尝试读取它之前没有被初始化并且没有被赋值:
int max , min , count = 0 , s;
[...]
s+=n;
您看到的所有行为以及它显然 "worked" 在您的计算机上和在其他人的计算机上 "not work" 的事实或多或少都是随机发生的。
这是一个简单的解决方法:
int max , min , count = 0 , s = 0;
请注意,您的编译器应该警告您未初始化的变量。如果不是,那么也许你应该选择更高的警告级别。
另请注意,您的程序中还有很多其他缺陷,例如 using namespace std
的使用,您在同一行中声明了多个变量,或者您的某些变量名称不是很清楚.
我使用 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;
}
这两个程序都有 未定义的行为 因为 s
在您第一次尝试读取它之前没有被初始化并且没有被赋值:
int max , min , count = 0 , s;
[...]
s+=n;
您看到的所有行为以及它显然 "worked" 在您的计算机上和在其他人的计算机上 "not work" 的事实或多或少都是随机发生的。
这是一个简单的解决方法:
int max , min , count = 0 , s = 0;
请注意,您的编译器应该警告您未初始化的变量。如果不是,那么也许你应该选择更高的警告级别。
另请注意,您的程序中还有很多其他缺陷,例如 using namespace std
的使用,您在同一行中声明了多个变量,或者您的某些变量名称不是很清楚.