2012-04-16 12 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; 
     } 

Con il codice di cui sopra Volevo solo sapere cosa sotto due linee sarà davvero fare nel codice sopraC++ Walkthrough cout.setf (ios :: fixed); e cout.precision();

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

prega di non solo dare a rispondere qualche spiegazione sarebbe così apprezzato perché Sto facendo una soluzione per preparare il mio esame finale domani.

Ho cercato e qualche fonte dice che è quello di impostare le bandiere, ma in realtà non ottenere quello che è il concetto di esso e come funziona

+5

[ 'std :: :: ios_base setf'] (http: // it .cppreference.com/w/cpp/io/ios_base/setf) e ['std :: ios_base :: precision'] (http://en.cppreference.com/w/cpp/io/ios_base/precision). Entrambe le pagine hanno spiegazioni su ciò che le funzioni fanno – Praetorian

+0

Grazie! Non voglio davvero rovinare il mio processo di esplorazione del programma, ma quel setf [Imposta flag] si riferisce a tutto l'output o qualsiasi cosa stia andando a coutare più tardi? – Ali

+1

Non capisco cosa intendi per * tutto l'output o qualsiasi cosa stia andando a cout in seguito *. Stai applicando i flag di formattazione allo stream 'std :: cout' chiamando' setf() ', in modo che influenzi il modo in cui' print cout' compila nelle chiamate future. – Praetorian

risposta

11
cout.setf(ios::fixed) 

rende cout stampa galleggia con un numero fisso di decimali e

cout.precision(3) 

imposta questo numero su tre.

Ad esempio, se hai un

double f = 2.5; 

poi

cout << f; 

stamperà

2.500 
+0

come rimuovere il setf (ios :: fixed) una volta finito? – sumanth232

+0

Secondo la documentazione 'cout.unsetf (ios :: fixed)' dovrebbe fare il trucco. – bjhend

3

Grande documentazione su come formattare l'output: Output formatting

È sempre utile quando si tenta di eseguire un'interfaccia utente della riga di comando.

0

E 'simile al compresa la biblioteca di manipolazione:
includono:

<iomanip> 

e quindi utilizzando le seguenti funzioni

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

using namespace std; 

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

L'uscita sarà in notazione scientifica come:

2e+009 

Al fine di ottenere il valore in quanto è si dovrebbe usare cout.setf(ios::fixed)

#include<iostream> 

    using namespace std; 

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

L'uscita sarà come lo è con precisione di default, che è 6 per float.

2000000000.000000 

È possibile impostare la precisione nel codice sopra come:

cout.precision(7); 

.....

Problemi correlati