2012-04-16 16 views
7
/* Problem 38 */ 
     #include <iostream> 
     using namespace std; 
     class abc { 
     double n; 
      public: 
     abc() { n = 67.5; cout << "1\n"; } 
     abc(double num) { set(num); cout << "2\n"; } 
     double get() const { cout<<"3\n"; return n; } 
     virtual void set(double num) { 
      if (num < 10) 
      n = 10; 
      else if (num > 100) 
      n = 100; 
      else 
      n = num; 
      cout << "4\n"; 
     } 
     }; 
     class def: public abc { 
     double m; 
      public: 
     def() { m = 6.2; cout << "5\n"; } 
     def(double num1, double num2): abc(num1) { 
      set(num2 - abc::get()); cout << "6\n"; } 
     double get() const { 
      cout << "7\n"; return m + abc::get(); } 
     void set(double num) { 
      if (num < 10 || 100 < num) 
      m = num; 
      else 
      m = 55; 
      cout << "8\n"; 
     } 
     }; 
     void do_it(abc &var, double num) 
     { cout << var.get() << '\n'; 
     var.set(num); 
     cout << var.get() << '\n'; 
     } 
     int main() 
     { abc x(45); 
     def y(2, 340); 
     cout.setf(ios::fixed); 
     cout.precision(3); 
     do_it(x, 200); 
     do_it(y, 253); 
     cout << x.get() << '\n'; 
     cout << y.get() << '\n'; 
     return 0; 
     } 

Z powyższego kodu Chciałem tylko wiedzieć, co poniżej dwóch liniach naprawdę zrobi w powyższym kodzieC++ Opis przejścia cout.setf (ios :: fixed); i cout.precision();

cout.setf(ios::fixed); cout.precision(3);

Proszę nie dajcie mi odpowiedzieć na jakieś wyjaśnienie byłoby bardzo mile widziane, ponieważ Robię instruktaż, aby jutro przygotować się do mojego końcowego egzaminu.

Szukałem i jakieś źródło mówi, że to ustawienie flagi, ale naprawdę nie rozumiem, co to pojęcie jest i jak to działa

+5

[ 'std :: ios_base :: setf'] (http: // pl .cppreference.com/w/cpp/io/ios_base/setf) i ['std :: ios_base :: precision'] (http://en.cppreference.com/w/cpp/io/ios_base/precision). Obie strony zawierają wyjaśnienia dotyczące tego, co robią funkcje: – Praetorian

+0

Dzięki! Naprawdę nie chcę zepsuć mojego procesu przechodzenia przez program, ale setf [Ustaw flagę] odnosi się do wszystkich wyników lub cokolwiek będzie później? – Ali

+1

Nie rozumiem, co masz na myśli przez * wszystkie dane wyjściowe lub cokolwiek innego będzie miało później *. Stosujesz flagi formatujące do strumienia 'std :: cout', wywołując' setf() ', co wpływa na sposób, w jaki' printfs wypływa 'w przyszłych połączeniach. – Praetorian

Odpowiedz

11
cout.setf(ios::fixed) 

sprawia cout druku płynie ze stałą liczbą miejsc po przecinku i

cout.precision(3) 

ustawia tę liczbę na trzy.

Na przykład, jeśli masz

double f = 2.5; 

następnie

cout << f; 

wypisze

2.500 
+0

jak usunąć setf (ios :: fixed) po zrobieniu z niego? – sumanth232

+0

Zgodnie z dokumentacją 'cout.unsetf (ios :: fixed)' powinno wystarczyć. – bjhend

3

Wielką dokumentację na temat sposobu formatowania wyjścia: Output formatting

Jest to zawsze przydatne, gdy próbujesz wykonać interfejs wiersza polecenia.

0

Jest podobny do w tym biblioteki manipulacji:
obejmują:

<iomanip> 

a następnie za następujące funkcje

cout << fixed << showpoint; 
cout << setprecision(3); 
0
#include<iostream> 

using namespace std; 

int main(){ 
    float large = 2000000000; 
    cout << large; 
    return 0; 
} 

wyjście będzie w notacji naukowej jak:

2e+009 

Aby uzyskać wartość jak to należy użyć cout.setf(ios::fixed)

#include<iostream> 

    using namespace std; 

    int main(){ 
     cout.setf(ios::fixed); 
     float large = 2000000000; 
     cout << large; 
     return 0; 
    } 

wyjście będzie jak to jest z precyzją, która jest domyślną 6 dla pływaka.

2000000000.000000 

Można ustawić precyzję w powyższym kodzie jak:

cout.precision(7); 

.....