#include<fstream.h>
#include<iomanip.h>
#include<iostream.h>
using namespace std;
ifstream f("atestat.in");
ofstream g("atestat.out");
int n,i,nr=0;
float v[100];
void a(int n)
{
for(i=1;i<=n;i++)
f>>v[i];
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
}
int main()
{
f>>n;
a(n);
cout<<endl;
float s=0;
for(i=1;i<=n;i++)
{
if(v[i]<0)
{
s=s+v[i];
nr++;
}
}
cout<<setw(2)<<s/nr<<endl;
}
мой файл «atestat.in» содержит:
6
-56,765 2,3 4,56 -1,2 -1,8 3
Сначала программа отображает все числа во второй строке файла «atestat.in» с помощью массива, а затем должна отображать среднее арифметическое всех отрицательных чисел внутри этого массива с точностью до 2 цифры после запятой. По какой-то причине setw (2) вообще ничего не делает, так как мой cout<<setw(2)<<s/nr<<endl;
отображает «19,9217» вместо «19,92» … кто-нибудь может сказать мне, почему? Я использую это как-то неправильно?
с точностью до 2 цифр после десятичной запятой
Для этого вам необходимо:
std::cout << std::fixed;
std::cout << std::setprecision(2) << f << '\n'; //assume f the number you wanna print
станд :: setw не служит для этого:
Когда используется в выражении из << setw (n) или in >> setw (n), устанавливает параметр ширины потока как равный или равный n.
Других решений пока нет …