2013-05-18 21 views
0
#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」 文件包含: -56.765 2.3 4.56 -1.2 -1.8 3爲什麼setw不工作?

該程序首先顯示所有的號碼的 「atestat.in」 文件的第二行,通過使用一個數組,然後它應該顯示該數組內所有負數的算術平均數,小數點後面的精度爲2個數字。出於某種原因,setw(2)什麼也沒有做,因爲我的cout<<setw(2)<<s/nr<<endl;顯示「19.9217」,而不是「19.92」......有誰能告訴我爲什麼?我以某種方式使用它不正確?

+4

你看過有關'std :: setw'的任何文檔嗎?另外,我可以告訴你的編譯器真的很舊,因爲它接受那些被刪除的頭文件。如果可以的話,從它們中移除'.h',然後升級編譯器。 – chris

+0

是的,我一直在尋找一個原因,它可能無法正常工作,我已經看到它的使用等例子,但我使用的代碼似乎對我很好...所以我真的不知道 – Juggl3r

+0

它是編譯器,我必須用於一個項目......我知道這是非常古老的,但這是他們讓我們使用的東西,所以就是這樣。另外,如果我把.h或不,我沒有什麼區別,我只是習慣於把它放在一邊。 – Juggl3r

回答

2

與2號的小數標誌

爲此後的精度,您需要:

std::cout << std::fixed; 
std::cout << std::setprecision(2) << f << '\n'; //assume f the number you wanna print 

std::setw不用於這一目的:

當用在表達式< < setw(n)或>>中時w(n)將流的寬度參數設置爲n或者n。

+0

是的,我知道我可以使用setprecision,但這意味着我以後將顯示的所有內容都將以2個數字的精度顯示,除非我每次都更改精度......是否沒有辦法解決這個問題? – Juggl3r

+0

@GîdeiCodrin從文檔中查看示例? http://en.cppreference.com/w/cpp/io/manip/setprecision – taocp

+0

不幸的是,我不明白這個例子是如何回答我的問題的......請問你能解釋一下嗎? – Juggl3r