Entrada / Saída
Entrada e Saída em C
 Entrada e saída pelo console

Funções getchar e putchar
• Retorna ou escreve na saída padrão 1 caracter

Função puts
• Escreve uma cadeia de caracteres na saída
padrão (gets está em desuso).
• Puts é a mais rápida função para escrita de
cadeias de caracteres em C
Entrada e Saída em C
 Entrada e saída formatada pelo console

Funções printf e scanf
• Podem realizar leitura/escrita em vários
formatos
•
printf (const char *string_de_controle, ...)
•
• Onde a string de controle define a formatação
dos dados a serem impressos e o número de
argumentos é indefinido
Entrada e Saída em C

%c
%d, %i
%u
%e
%f
%o
%s
%x, %X
%%
Formatação
Caracter
Inteiros com sinal
Inteiros sem sinal
Notação científica
Ponto flutuante
Octal
String
Hexa (minúsculo e maiúsculo)
Símbolo %
Entrada e Saída em C

%6d
%06d
%3.2f
Formatação
Inteiros ocupando 6 espaços
Ocupando 6 espaços, preenchidos com 0
Ponto flutuante, precisão de 2 casas
Entrada e Saída em C

Scanf
•
printf (const char *string_de_controle, ...)
•
• Onde a string de controle obedece as mesmas
formatações de printf
• Toda a lista de argumentos de scanf após da
string de controle deve ser de ponteiros para as
variáveis a serem lidas
Entrada e Saída em C

Scanf
#include
int
}
<stdio.h>
main() {
char str[256];
int d;
scanf("%s %d", str, &d);
printf("string: %s\n", str);
printf("número: %d\n", d);
return 0;
Entrada e Saída em C
 Entrada e saída com arquivos

Os principais elementos são a estrutura
FILE (em stdio.h) e a função fopen
 *fopen (const char *nome, const char *modo)
FILE

r
w
a
b
Onde os modos podem ser combinações
de
Abre para leitura
Abre para escrita
Insere ao final
Abre em formato binário
Entrada e Saída em C

Função feof
• Determina se chegou ao final do arquivo

Funções fputs, fgets
• Maior desempenho em operações de E/S com
texto
int fputs (const char *str, FILE *stream);
char *fgets (char *str, int size, FILE *stream);
Entrada e Saída em C

Funções fprintf, fscanf
• Mesmas funções das similares para terminais,
cujo primeiro parâmetro porém é um ponteiro
para a estrutura FILE correspondente ao
arquivo aberto
int fprintf(FILE *stream, const char *format, ... );
int fscanf(FILE *stream, const char *format, ... );
Entrada e Saída em C

Fseek – Posiciona o ponteiro de leitura do
arquivo em um determinado local
•
int fseek (FILE *f, long int offset, int origin);
•
• Valores possíveis de origin são
SEEK_SET •– Início do arquivo
SEEK_CUR – Ponteiro atual
SEEK_END •– Final do arquivo


Rewind – Retorna ao início do arquivo
void rewind ( FILE * stream );
Entrada e Saída em C

fread e fwrite
• Entrada e saída de baixo nível
size_t fread (void *p, size_t size,
size_t count, FILE * stream);
size_t fwrite (const void *p, size_t size,
size_t count, FILE *stream);
Entrada e Saída em C
 sprintf e scanf

Equivalentes para leitura/escrita sobre
cadeias de caracteres
size_t sprintf (char *str, const char format, ...);
size_t sscanf (char *str, const char format, ...);
Entrada e Saída em C
 Streams padrão

São fornecidas pela biblioteca de stdio.h

São abertas automaticamente no início da
execução de cada programa
• stdout – Saída padrão
• stdin – Entrada padrão
• stderr – Saída de erro padrão

Percebam que printf e scanf são apenas
usos de fprintf e fscanf sobre as streams
de saída e entrada padrão
Entrada e Saída em C
#include
int
}
<stdio.h>
main(int argc, char **argv) {
FILE *f = fopen([argv[1], "r");
char c[256];
if (!f) {
printf("Erro ao abrir o arquivo");
return 1;
}
while (!feof(f)) {
fgets(c, 256, f);
printf("%s", c);
}
fclose(f);
return 0;
Entrada e Saída em C
 Importante

Arquivos abertos consomem recursos do
sistema operacional

Cada programa possui um número máximo
de recursos do SO que pode manter
abertos por vez, incluindo arquivos
 SEMPRE abra arquivos somente
quando for preciso e feche-os tão logo
não sejam mais necessários
Entrada e Saída em C
 Faça um programa em C que leia os
nomes de todos os alunos a partir de
um arquivo, receba as médias finais
pelo teclado, gerando um arquivo de
saída com os nomes, a média e a
situação de cada um (aprovado,
reprovado, final)
Entrada e Saída em C
 Faça um programa em C que a partir de
dois nomes de arquivo informados
(origem e destino), realize a cópia de
um para outro

Caso a origem exista, o programa deve
pedir confirmação para sobrescrever
através das letras S e N
I/O básica em C++
 Uso de Streams (fluxos) de I/O e
classes para sua manipulação

istream – classe para entrada

ostream – classe para saída
 Objetos do tipo istream e ostream

cin – associado à entrada padrão

cout – associado à saída padrão

cerr – associado à saída padrão de
erro
I/O básica em C++
I/O básica em C++
Operadores associados a I/O

>>
• operador de extração dos dados
de entrada
cin >> x;

<<
• operador de inserção de dados
na saída
cout << x;
I/O básica em C++
 >> e << permitem encadeamento

Leitura de um inteiro e um float
int x;
float f;
cin >> x >> f;

Saída de um inteiro e uma
String
int x;
cin >> x;
cout << “x vale “ << x;
I/O básica em C++
 >> e << podem ser sobrecarregados

Rotinas de impressão mais simples
• Não é necessário fazer uma rotina que
trate todos os tipos

Novas classes definem como serão
lidas (extraídas da entrada) ou como
serão escritas (inseridas na saída)

Simplicidade da sintaxe facilita o
aprendizado das manipulações de
I/O
I/O básica em C++
 Rotinas auxiliares de << e >>

Métodos get de istream
get(char *s, int tam, char delim);
get(char *s, int tam);
get(char &ch);

Métodos de ostream
put(char c);
write(char *s, streamsize n);
flush();
setf(fmtflags mask);
unsetf(fmtflags mask);
I/O básica em C++
 Rotinas auxiliares de << e >>

Métodos de ostream
width(int largura);
fill(char ch);
 Manipuladores

Permitem a manipulação das funcionalidades do stream
cout << hex << x << endl;
cout << flush;
cout << right << y << endl
I/O básica em C++
 Principais flags de formato

ios::showbase: indica a base (dec, oct ou hex) ao
imprimir um valor inteiro.

ios::showpoint: mostra o ponto decimal e zeros de
preenchimento para valores de ponto flutuante.

ios::uppercase: mostra A-F maiúsculas para
valores hexadecimais e E para valores em notação
científica.

ios::showpos: apresenta o sinal + precedendo os
valores positivos.

ios::unitbuf: “Buferização Unitária” O stream é
descarregado (flush) após cada inserção.
I/O básica em C++
 Principais flags de formato

ios::basefield: controla a base (dec, oct ou
hex) numérica a ser utilizada
• ios::dec: formata valores na base 10.
• ios::hex: formata valores na base 16
• ios::oct: formata valores na base 8

ios::floatfield: controla o formato de
valores de ponto flutuante
• ios::scientific: notação científica
• ios::fixed: notação fixa
• “automatic”: precisão indica dígitos
significativos
I/O básica em C++
 Principais flags de formato

ios::adjustfield: controla o alinhamento
dos campos
• ios::left: alinha campos a esquerda.
Caracters de preenchimento são colocados
à direita
• ios::right: alinha campos a direita.
Caracters de preenchimento são colocados
à esquerda
• ios::internal: Caracters de preenchimento
são colocados entre o sinal e o valor
I/O básica em C++
 Principais manipuladores

setiosflags: ativa um conjunto de flags de I/O.
cout << setiosflags( ios::unitbuf |
ios::showbase |
ios::uppercase |
ios::showpos);

resetiosflags: desativa um conjunto de flags de I/O.
cout << resetiosflags(ios::floatfield);

nuppercase: desativa flag de uppercase

noshowpos: desativa flag de showpos

dec, hex, oct: controla a base numérica utilizada
I/O básica em C++
 Principais manipuladores

setw: define largura mínima do campo

setfill: define caracter de preenchimento

setprecision: define o valor da precisão

scientific, fixed: controla o formato de
valores de ponto flutuante

left, right, internal: controla o alinhamento
do campo
I/O básica em C++
 Entrada e saída de baixo nível



read:
istream& read (char* s, streamsize n);
write:
ostream& write (const char* s , streamsize n);
I/O básica em C++
 Arquivos em C++

int
}
Arquivos são tratados por streams
específicas (ifstream e ofstream)
main(int argc, char ** argv) {
ifstream is(argv[1], ios::in);
if (!is) {
cerr << "Erro ao abrir arquivo" << endl;
return 1;
}
char s[256];
while (is.good()) {
is >> s;
cout << s << endl;
}
is.close();
return 0;
I/O básica em C++

Na construção da stream é possível utilizar
os seguintes valores
ios::in
ios::out
ios::app
ios::trunc
ios::binary
Abre para
Abre para
Abre para
Elimina o
Abre para
leitura
escrita
adicionar
conteúdo do arquivo
entrada/saída binária
I/O básica em C++
 Repita os dois exercícios para E/S em C,
usando as funções do C++
Download

Entrada / Saída