Você está na página 1de 13

14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

Programar em C++/Entrada e sada de dados 2


Origem: Wikilivros, livros abertos por um mundo aberto.
< Programar em C++

ndice
1 Entrada/Sada em ficheiros (arquivos)
2 Gravar (Salvar) os dados para um ficheiro(arquivo)
3 O que um ficheiro(arquivo)?
4 Ficheiros(Arquivos) binrios e tipo texto
5 biblioteca padro fstream
6 Abrir um ficheiro(arquivo)
7 Usando o Construtor
8 Usando a funo membro "open"
9 Comparando os dois mtodos (pela funo membro e pelo construtor)
10 Abrir um arquivo para leitura
11 Verificar se o ficheiro (arquivo) foi aberto.
12 Fechar um ficheiro (arquivo)
13 Looping pelo ficheiro (arquivo).
14 Manipuladores
14.1 Ajustando a largura da entrada/sada
14.2 Preenchimento de espaos em branco
14.3 Ajustando a preciso
15 Exerccios

Entrada/Sada em ficheiros (arquivos)


Nota introdutria: Este capitulo geralmente colocado uns captulos mais para o fim, mas acho por
bem que se torne as coisas mais interativas, o que possvel introduzindo agora operaes em arquivos, d
muito mais entusiasmo. Encontramos aqui conceitos avanados mas podero ser deixados para depois se o
leitor no quiser observar o tema neste momento.

Gravar (Salvar) os dados para um ficheiro(arquivo)


Os dados que mantemos nos programas esto guardados na memria RAM, que limpa quando o
programa ou computador para de funcionar. Isso implicaria que perderamos toda a informao! Porm existe
uma maneira para tornar os dados persistentes que gravar os dados num ficheiro (arquivo) no "hard drive"
(disco rgido) ou no outro meio persistente. Nas formas mais diretas de escrita podemos passar os dados em
formato binrio para o ficheiro(arquivo). Outros meios avanados para guardar dados podem envolver bases de
dados relacionais ou XML.

O que um ficheiro(arquivo)?
Um arquivo uma coleo de dados que esto localizados numa memria persistente tipo hard drive,
cd-rom, etc. Para identificarmos o arquivo podemos atribuir-lhe um nome (filename). Os "filenames" tm
usualmente uma extenso, que determina o tipo de arquivo em sistemas operacionais semelhantes aos da
Microsoft, mas que podem ser dispensados em sistemas operacionais que guardam as caractersticas dos
arquivos no meio de armazenamento, tais quais sistemas UNIX e seus similares GNU/Linux, FreeBSD, etc...

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 1/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

A extenso representada por 3 ou 4 letras que seguem aps o nome do arquivo e um ponto ".". Por exemplo:
"joao.doc" ou "joao.odt". Isto diz-me que temos um ficheiro(arquivo) que se chama "joao", e que tem a
extenso .doc que refere usualmente a documentos do WORD no primeiro caso e com extenso ".odt" do
OpenOffice no segundo. Outros tipos de extenses podem ser ".xls" para documentos EXCEL, ".ods" para
planilhas do OpenOffice. ou ainda ".cpp" para ficheiros(arquivos) de cdigos de c++.

Ficheiros(Arquivos) binrios e tipo texto


Existem na verdade dois tipos de ficheiros(arquivos): os do tipo texto e os do tipo binrio.

Os arquivos tipo texto apenas armazenam texto obedecendo uma codificao de caracteres, a mais
comum a ASCII, isto implica no uso do cdigo para armazenamento, ou seja, pode ser que a
codificao seja interpretada antes de ser efetivada no meio de armazenamento.
Os arquivos binrios podem guardar mais informao, como imagens, base de dados, programasPor
exemplo, editores de texto com formatao, como o OpenOffice e o Word, guardam os seus arquivos em
formatos binrios, porque eles possuem alm do texto, informao acerca da formatao do texto, para as
tabelas, as listas numeradas, tipo de fonte, etc... da aparecerem os caracteres de formatao tipo 6, L,
h5

Os arquivos binrios podero ser mais bem explorados em um tpico avanado, vamos trabalhar
inicialmente com arquivos tipo texto, que poderemos operar de maneira mais simplificada.

biblioteca padro fstream


At agora temos usado a biblioteca iostream (i de input + o de output + stream), que suporta, entre
vrias funcionalidades, o objeto cin para ler da "standard input" (que usualmente o teclado) e o objeto cout
para "standard output" (que usualmente o monitor)

Ora, agora queremos ler e escrever para ficheiros(arquivos) e isso requer a biblioteca fstream (f de file
+ stream). Esta biblioteca define 3 novos tipos de classe:

ofstream (apenas para sada "out to a file". serve para criar, manipular ficheiros (arquivos) e escrever,
no serve para ler).
ifstream (apenas para entrada "in from a file" . serve para ler ficheiros (arquivos), receber dados dos
mesmos, no serve para criar nem escrever).
fstream (este conjuga os dois tipos anteriores, "input and output to file". cria ficheiros (arquivos), escreve
e l informao dos mesmos.

Abrir um ficheiro(arquivo)
Um ficheiro(arquivo) deve ser aberto pelo programa para que o mesmo possa ser manipulado, a
abertura do arquivo implica, entre outras coisas, em atribuir um identificador que nos permita ter acesso aos
seus dados. necessrio criar uma linha de comunicao entre o arquivo e o objeto stream.

Podemos recorrer a dois mtodos para abrir um ficheiro (arquivo):

1. Usando um construtor;
2. Usando a funo membro chamada de "open".

Usando o Construtor
O construtor uma funo que automaticamente chamada quando tentamos criar uma instncia de um
objeto.

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 2/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

fstream afile; // criado uma instncia do fstream chamada de afile

Os construtores de objetos podem ser sobrecarregados, ou seja, para a mesma classe podemos ter um
construtor sem argumentos, com um argumento, dois argumentos, etc. No exemplo anterior criamos um sem
argumentos. Os construtores no retornam valores, geralmente o compilador reporta erro quando se declara
funes que retornam valor e estas tm o mesmo nome da classe, pois este nome reservado para os
construtores. Vamos dar um exemplo com dois argumento:

ofstream outfile ("joao.doc" , ios::out);

Chama o construtor com dois argumentos, criando uma instncia de ofstream e abrindo o
ficheiro(arquivo) "joao.doc" para operaes de sada.

Usando a funo membro "open"


Esta funo tem como primeiro argumento o nome e localizao do ficheiro/(arquivo) a ser aberto, o
segundo argumento especifica o modo de abertura.

Sobre a questo da localizao existem 2 tipos, o "path" relativo e o "path" absoluto. Para este ltimo
indicamos o caminho todo: "c:\\....\\joao.doc" em sistemas Microsoft ou "/home/joao/joao.odt" para sistemas
UNIX e similares. O "path" relativo dispensa essa descrio se o ficheiro/(arquivo) estiver (na mesma
directoria)/(no mesmo diretrio) que o programa.

Sobre a questo do modo de abertura temos as seguintes modalidades:

Modo do sinalizador
Descrio
abertura (Flag)
"Append Todos os dados do arquivo so preservados e qualquer sada escrita a partir do fim
ios::app
mode" do arquivo.
Se o arquivo j existe,o programa vai diretamente ao seu fim.O modo de escrita
ios::ate ento feito de forma aleatria.Usado normalmente com arquivos do modo
binrio(binary mode).
"Binary
ios::binary Informaes so escritas na forma binria e no na forma textual(text mode).
mode"
"Input
ios::in Leitura de informaes de arquivo(no ir criar um arquivo novo)
mode"
"Output
ios::out Informaes sero escritas no arquivo.
mode"
Se o arquivo j existe,suas informaes sero truncadas, outra forma de se dizer:
ios::trunc
deletadas e reescritas.

Os sinalizadores (flags) so nmeros em potncias da base binria, portanto podemos ter vrios flags ao mesmo
tempo se usarmos o operador unrio para a operao "OU", como no exemplo abaixo:

ofstream outfile ; //crio o objeto outfile


outfile .open("students.dat" , ios::binary | ios::app); /*chamo a funo membro open do objeto,
com o 1 parmetro que o nome do arquivo
e o 2 o modo de abertura. */

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 3/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

Observe que estamos abrindo o arquivo "students.dat" em modo binrio e ao mesmo tempo com o modo
"append", isto significa que abriremos o arquivo e poderemos preservar o seu contedo anterior inserindo os
novos dados no fim do arquivo.

Comparando os dois mtodos (pela funo membro e pelo construtor)


O primeiro mtodo similar a ter

int age;
age=39;

O segundo mtodo similar a

int age=39;

A escolha do melhor mtodo em cada situao depende do contexto em que estamos criando o cdigo,
geralmente quando j temos o objeto criado e ele est fechado podemos abrir um novo arquivo com ele e
depois fech-lo novamente, isto nos sugere que usemos a funo open quando o objeto deve abrir arquivos
diferentes em cada trecho de cdigo, embora que possam surgir outras funcionalidades, dependendo de como o
projeto foi idealizado.

Abrir um arquivo para leitura


A histria aqui a mesma s tem uma diferena: que no caso de leitura, no ser criado nenhum
ficheiro (arquivo) caso ele no exista.

ifstream arq; //cria objeto "arq"


arq.open (joo.doc); //chama funo membro open ao objeto "arq", com o
//parmetro do nome do ficheiro

Poderamos fazer o mesmo com o construtor:

ifstream arq (joo.doc);

Ou ainda

fstream bloco;
bloco.open("joao.doc" , ios::in)

ou ainda

fstream b(joao.doc, ios::in)

H mais uma nota a fazer, se quisermos ler e escrever, no podemos usar o ofstream e o ifstream ao mesmo
tempo, teremos de usar o fstream. Teremos de fazer:

fstream a (joo.doc, ios::in | ios::out);

Neste caso, o comportamento padro preservar o contedo do ficheiro (arquivo) ou cri-lo caso ele
no exista.
https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 4/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

Verificar se o ficheiro (arquivo) foi aberto.


Vamos verificar o que acontece quando tentamos abrir um arquivo que no existe, a primeira verso do
nosso exemplo observa o comportamento bsico do fstream:

#include <fstream>
#include <iostream>

using namespace std;

int main ()
{
ifstream arq; //crio objeto "arq" da classe ifstream - leitura
arq.open("joao.doc" ); //chamo funo membro open

cout << "(arq) = " << arq << endl; //imprime o objeto
cout << "(arq.fail()) = " << arq.fail() << endl; //chamo funo membro fail

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

No caso do ficheiro (arquivo) joao.doc no existir:

(arq) = 00000000
(arq.fail()) = 1

No caso do ficheiro (arquivo) joao.doc existir no mesmo diretrio que o programa:

(a) = 0012FE40
(a.fail()) = 0

Repare que o resultado a impresso do endereo, do objeto a de ifstream. d um ponteiro!!

Agora, vajamos um exemplo mais completo:

#include <fstream>
#include <iostream>

using namespace std;

int main ()
{
ifstream arq; //crio objeto "arq" da classe ifstream - leitura
string str;

arq.open("joao.doc" ); //chamo funo membro open

if (arq.is_open () && arq.good())


{
arq >> str;
cout << "contedo: \n " << str << endl; //imprime o contedo do arquivo

arq.close();
}

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 5/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

Observe que aqui verificamos se o arquivo foi aberto com a funo membro is_open() que retorna
verdadeiro "true" caso o arquivo foi aberto, depois verificamos se o arquivo foi aberto satisfatoriamente atravs
da funo membro good(), que tambm retorna verdadeiro se o arquivo pode ser usado.

Fechar um ficheiro (arquivo)


Devemos fechar depois de ler e/ou escrever. Mas por que, se o objeto do ficheiro ir ser fechado assim
que o programa acabar? Porque estamos a utilizar recursos com um ficheiro (arquivo) aberto, porque alguns
sistemas operativos (operacionais) limitam o n de ficheiros (arquivos) abertos, e estando este aberto impede
que outros se possam abrir e por fim porque se no fecharmos, outros programas no podero abri-lo at que o
fechemos. Este comportamento faz parte de um esquema de controle de acesso usado pelo sistema para
assegurar que os arquivos no sero usados por processos diferentes ao mesmo tempo.

ofstream outfile ;
outfile .open("students.dat" );
// ....
outfile .close();

Vamos criar um exemplo mais real. Queremos criar um programa que escreva informao inserida pelo
utilizador num ficheiro por ns escolhido

#include <fstream>
#include <iostream>

using namespace std;

int main ()
{
char data[80]; //criamos um array de 80 caracteres
ofstream outfile ; //criamos objeto da classe ofstream

outfile .open("joao.doc" ); //chamamos a funo membro da classe para o objeto criado.


// Esta funo membro cria o arquivo "joao.doc"

if (outfile .is_open () && outfile .good()) //verificamos se est tudo bem


{ cout << "digite o seu nome: " ; //imprime no ecr (monitor) a frase
cin.getline (data, 80); //chama funo membro getline do objeto cin para
//ler o que foi escrito pelo usurio

outfile << data << endl; //coloca o array no objeto criado.


outfile .close(); //fechamos o objeto.
}

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

Podemos ir ver o novo ficheiro/arquivo com o nome joao.doc e tem l escrito aquilo que digitamos.

Agora vamos tentar ler o que escrevemos no documento criado.

#include <fstream>
#include <iostream>
using namespace std;
int main ()
{
char data[80];
ifstream infile ;
infile .open("joao.doc" );

if (infile .is_open () && infile .good()) //verificamos se est tudo bem


{ infile >> data; //colocamos os dados abertos no array
cout << data << endl;

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 6/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros
infile .close();
}

#ifdef WIN32
system ("pause" );
#endif
return 0;
}

Repare que se tivssemos escrito duas palavras, apenas uma era apresentada (ela pra no primeiro
whitespace), para isso necessitaramos de repetir:

#include <fstream>
#include <iostream>
using namespace std;
int main ()
{
char data[80];
ifstream infile ;
infile .open("joao.doc" );

if (infile .is_open () && infile .good()) //verificamos se est tudo bem


{ infile >> data; //colocamos os dados abertos no array
cout << data << endl;
infile >> data; //colocamos os dados abertos no array
cout << data << endl;
infile .close();
}

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

Agora j obtemos 2 palavras e so apresentadas em linhas diferentes. Mas temos de arranjar um mtodo
para no estar a repetir constantemente, podemos fazer isso com

infile .getline (data, 80);

Ento ficamos com:

#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string data;
ofstream outfile ;
outfile .open("joao.doc" );
if (outfile .is_open () && outfile .good()) //verificamos se est tudo bem
{
cout << "Writing to the file" << endl;
cout << "===================" << endl;
cout << "Enter class name: " ;
getline (cin, data);
outfile << data << endl;
cout << "Enter number of students: " ;
cin >> data;
cin.ignore (); //esta funo membro para limpar o caractere
//newline do inputbuffer depois de usar o objeto
//cin com o operador de extrao >>
outfile << data<< endl;
outfile .close();
}

ifstream infile ;

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 7/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

infile .open("joao.doc " );

if (infile .is_open () && infile .good()) //verificamos se est tudo bem


{ cout << "Reading from the file" << endl;
cout << "=====================" << endl;
getline (infile , data);
cout << data << endl;
getline (infile , data);
cout << data << endl;
infile .close();
}

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

Looping pelo ficheiro (arquivo).


E se no soubermos quantas linhas tem o arquivo? O objeto ifstream tem uma funo membro que a
eof() (e-end+o-of+f-file). Esta funo no tem parmetros e retorna "true" se o fim do arquivo for alcanado e
"false" caso contrrio. No entanto, esta funo eof() no de confiana com os ficheiros (arquivos) texto como
o para os binrios ( que nos ficheiros (arquivos) binrios no existem espaos em branco).

A melhor alternativa usar a funo membro fail().

ifstream infile ;
infile .open("joao.doc" );

if (infile .is_open () && infile .good())


{ infile >> data;

while(!infile .fail())
{ infile >> data;
cout << data;
}

infile .close();
}

Refazendo tudo

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

int main ()
{
string data;
ofstream outfile ;
outfile .open("joao.doc" );

if (outfile .is_open () && outfile .good())


{
cout << "Escrevendo no arquivo" << endl;
cout << "===================" << endl;
cout << "Informe o nome da classe: " ;
getline (cin, data);
outfile << data<< endl;
cout << "informe o nmero de estudantes: " ;
cin >> data;
cin.ignore ();
outfile << data<< endl;
outfile .close();

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 8/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros
}

ifstream infile ;
infile .open("joao.doc" );

if (infile .is_open () && infile .good())


{
cout << "Lendo do arquivo" << endl;
cout << "=====================" << endl;
getline (infile , data);

while(!infile .fail())
{
cout << data << endl;
getline (infile , data);
}

infile .close();
}

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

Agora vamos fazer o nosso programa mais modular:

1. . writeFile para abrir um arquivo para escrita usando o ofstream e


2. . readFile - ler do ficheiro (arquivo) usando o ifstream
3. . Cada funo ir verificar se o ficheiro (arquivo) foi aberto com sucesso

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

bool writeFile (ofstream &, char*);


bool readFile (ifstream &, char*);

int main ()
{
string data;
bool status ;
ofstream outfile ;

status = writeFile (outfile , "students.dat" );


if (!status )
{
cout << "Arquivo no pode ser aberto para escrita. \n";
cout << "Programa terminando... \n";
return 0;
}
else
{
cout << "Escrevendo no arquivo" << endl;
cout << "===================" << endl;
cout << "Informe o nome da classe: " ;
getline (cin, data);
outfile << data<< endl;
cout << "Informe o nmero de estudantes: " ;
cin >> data;
cin.ignore ();
outfile << data<< endl;
outfile .close();
}

ifstream infile ;
status = readFile (infile , "students.dat" );
if (!status )
{
cout << "O arquivo no pode ser aberto para leitura. \n";

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 9/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros
cout << "Programa terminando... \n";
return 0;
}
else
{
cout << "Lendo do arquivo" << endl;
cout << "=====================" << endl;
getline (infile , data);
while(!infile .fail())
{
cout << data << endl;
getline (infile , data);
}
infile .close();
}

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

bool writeFile (ofstream & file, char* strFile )


{
file.open(strFile );
return !(file.fail()||!file.is_open ()||!file.good());
}

bool readFile (ifstream & ifile, char* strFile )


{
ifile.open(strFile );
return !(ifile.fail()||!ifile.is_open ()||!ifile.good());
}

Manipuladores
Os objetos das classes "stream" podem ser configurados para fornecer e reportar os dados de maneira
pr-formatada. Da mesma maneira que temos a formatao quando usamos funes de formatao, como
printf() e scanf(), na linguagem C, podemos usar os manipuladores na linguagem C++ para informar os objetos
streams em que formato desejamos receber os dados deles ou fornecer para eles.

Abaixo temos uma srie de manipuladores teis:

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 10/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

Manipulator Uso
boolalpha Faz com que variveis tipo bool sejam reportadas como "true" ou "false".
noboolalhpa
Faz com que variveis tipo bool sejam reportadas omo 0 ou 1.
(padro)
dec (padro) Determina que variveis tipo inteiras (int) sejam reportadas na base 10.
hex Determina que variveis tipo inteiras (int) sejam reportadas em hexadecimal.
oct Determina que variveis tipo inteiras (int) sejam reportadas em octal.
left Faz com que textos sejam justificados a esquerda no campo de sada.
right Faz com que textos sejam justificados a direita no campo de sada.
Faz com que o sinal de um nmero seja justificado a esquerda e o nmero seja justificado a
internal
direita.
noshowbase
Desativa a exibio do prefixo que indica a base do nmero.
(padro)
showbase Ativa a exibio do prefixo que indica a base do nmero.
noshowpoint
Mostra o ponto decimal apenas se uma parte fracionria existe.
(padro)
showpoint Mostra o ponto decimal sempre.
noshowpos
Nenhum sinal "+" prefixado em nmeros positivos.
(padro)
showpos Mostra um sinal "+" prefixado em nmeros positivos.
Faz com que espaos em branco, tabulaes, novas linhas "\n" sejam descartados pelo
skipws (padro)
operador de entrada >>.
Faz com que espaos em branco, tabulaes, novas linhas "\n" no sejam descartados pelo
noskipws
operador de entrada >>
fixed (padro) Faz com que nmeros com ponto flutuante sejam mostrados em notao fixa.
Scientific Faz com que nmeros com ponto flutuante sejam mostrados em notao cientfica.
nouppercase
0x mostrado para nmeros em hexadecimal e para notao cientfica.
(padro)
uppercase 0X mostrado para nmeros em hexadecimal e para notao cientfica.

Ajustando a largura da entrada/sada


setw(w) - Ajusta a largura da sada e entrada para w; precisa ser includo.
width(w) - Uma funo membro das classes iostream.

Preenchimento de espaos em b ranco

setfill(ch) - Preenche os espaos em branco em campos de sada com ch; precisa ser includo.
fill(ch) - Uma funo membro das classes iostream.

Ajustando a preciso
setprecision(n) - Ajusta a preciso de casas decimais em nmeros com ponto flutuante, para n dgitos.
Este ajuste apenas visual, de forma que o manipulador no afeta o modo de clculo do nmero pelo
programa.
https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 11/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros

Exemplificando o uso de manipuladores:

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

int main()
{
int intValue = 15;

cout << "Nmero inteiro" << endl;


cout << "Padro: " << intValue << endl;
cout << "Octal: " << oct << intValue << endl;
cout << "Hexadecimal: " << hex << intValue << endl;
cout << "Ativando showbase " << showbase << endl;
cout << "Decimal: " << dec << intValue << endl;
cout << "Octal: " << oct << intValue << endl;
cout << "Hexadecimal: " << hex << intValue << endl;
cout << "Desativando showbase " << noshowbase << endl;
cout << endl;

double doubleVal = 12.345678 ;

cout << "Nmeros com ponto flutuante" << endl;


cout << "Padro: " << doubleVal << endl;
cout << setprecision (10);
cout << "Preciso de 10: " << doubleVal << endl;
cout << scientific << "Notao cientfica: " << doubleVal << endl;
cout << uppercase ;
cout << "Caixa alta: " << doubleVal << endl;
cout << endl;

bool theBool = true;

cout << "Booleano" << endl;


cout << "Padro: " << theBool << endl;
cout << boolalpha << "BoolAlpha ativo: " << theBool << endl;
cout << endl;

string myName = "John" ;

cout << "Strings" << endl;


cout << "Padro: " << myName << endl;
cout << setw(35) << right << "Com setw(35) e \"right\": " << myName << endl;
cout.width(20);
cout << "Com width(20): " << myName << endl;
cout << endl;

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

Exerccios
1. Quero colocar num documento, uma lista das combinaes possveis entre a,b,c e d. com a respectiva
ordenao e quantidade;
2. . Quero que seja a pessoa a escolher o nome do ficheiro (arquivo) e escrever tambm a localizao;
3. . Quero que seja depois tansformado num sistema modular;
4. . Encontrar uma maneira para contar o n de espaos em branco, o n de caracteres "." que quisermos de
um dado documento.

#include <iostream>
#include <fstream>

using namespace std;

int main()
{

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 12/13
14/03/2017 Programar em C++/Entrada e sada de dados 2 - Wikilivros
int blank_count = 0;
int char_count = 0;
int sentence_count = 0;
char ch;
ifstream object ("jo.txt" );
if (! object )
{
cout << "Erro abrindo arquivo." << endl;
return -1;
}
while (object .get(ch))
{
switch (ch)
{
case ' ':
blank_count ++;
break;
case '\n':
case '\t':
break;
case '.':
sentence_count ++;
break;
default :
char_count ++;
break;
}
}
cout << "Existem " << blank_count << " espaos em branco;" << endl;
cout << "Existem " << char_count << " caracteres;" << endl;
cout << "Existem " << sentence_count << " sentenas." << endl;

#ifdef WIN32
system ("pause" );
#endif

return 0;
}

Obtido em "https://pt.wikibooks.org/w/index.php?
title=Programar_em_C%2B%2B/Entrada_e_sada_de_dados_2&oldid=256748"

Categoria: Livro/Programar em C++

Esta pgina foi modificada pela ltima vez (s) 23h21min de 28 de maio de 2013.
Este texto disponibilizado nos termos da licena Creative Commons Atribuio-Compartilhamento pela
mesma Licena 3.0 Unported; pode estar sujeito a condies adicionais. Consulte as Condies de Uso
para mais detalhes.

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Entrada_e_sa%C3%ADda_de_dados_2 13/13