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++