Jump to content
edub13

streamsize dúvida

Recommended Posts

edub13

Boas estou a ler o livro Accelerated C++, deparei me com este código:


#include <iomanip>
#include <ios>
#include <iostream>
#include <string>

using namespace std;

int main(){

string name;

cout << "Please enter your first name: ";
cin >> name;

cout << "Hello, " << name << "!" << endl;

double midterm, final;

cout << "Please enter your midterm and final exam grades: ";
cin >> midterm >> final;

cout << "Enter all your homework grades: ";

int count = 0;
double sum = 0;

double x;

while(cin >> x){
++count;
sum = sum + x; // ou sum += x
}

streamsize prec = cout.precision();

cout << "Your final grade is " << setprecision(3) << 0.2 * midterm + 0.4 * final + 0.4 * sum / count << setprecision(prec) << endl;

return 0;
}

Não estou a perceber bem o que isto faz :

 streamsize prec = cout.precision(); 

Percebi que o

 setprecision(3); 

serve para que a "precisão" do cout fique apenas a poder mostrar 3 digitos como por exemplo : 66.1 em vez de 66.1111, e que o

 setprecision(prec);

serve para fazer com que a precisão do cout volte a ser a original que pelo que vi supostamente é 6. Mas não compreendo o que o streamsize faz, será que está a dar à variável prec o valor original (6) da precisão do cout ? Para que mais tarde seja usada no

setprecision(prec)

para que o cout fique com a sua precisão original outravez ? (Peço desculpa se ficou muito confuso)


Learning:

C++

Share this post


Link to post
Share on other sites
pwseo

O código:

streamsize prec = cout.precision();

está simplesmente a declarar uma variável prec do tipo streamsize, com o valor de cout.precision(). O tipo de dados streamsize é apenas um tipo de número inteiro como outro qualquer, mas com um nome especial porque é para ser utilizado em contagens de caracteres em streams.

Por outras palavras, o que tens ali é uma declaração normalíssima, essencialmente equivalente a:

int prec = cout.precision();

Claro que streamsize pode não ser um int, mas a ideia é a mesma.

Se estiveres a utilizar C++11 e não quiseres pensar muito no assunto, podes simplesmente escrever:

auto prec = cout.precision();

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.