3.1 - Funções para manipular dados de entrada e saída padrão

Documentos relacionados
Linguagem C Entrada/Saída (console)

Linguagem de Programação C

Comandos de entrada. e saída. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada.

Capítulo 2 Operadores. A função scanf()

Linguagem C. André Tavares da Silva.

Aula 3 Constantes e funções de E/S

Introdução à Programação

Programação de Computadores I Funções Básicas da Linguagem C PROFESSORA CINTIA CAETANO

Funções de Entrada e Saída

Programação Estruturada

Introdução à Programação em C Input / Output

Linguagem C: Introdução

Aula 9 Oficina de Programação Strings. Profa. Elaine Faria UFU

Disciplina de Algoritmos e Programação

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Profa Rosana Braga

Computação Eletrônica. Strings. Prof: Luciano Barbosa. CIn.ufpe.br

Leitura de Arquivos. Prof. Fabrício Olivetti de França

Algoritmos e Programação

Introdução a Programação. Strings (Vetor de Caracteres)

Linguagem C Controle do Fluxo de Execução. Lógica de Programação

Introdução à Programação em C (II)

Matrizes em C. Lucas Ferrari de Oliveira Professor Adjunto. Universidade Federal do Paraná

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Ocorrem em três tipos:

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

LÓGICA DE PROGRAMAÇÃO. Resumo da Linguagem C. Sérgio Carlos Portari Júnior

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

Programação: Entrada e Saída de Dados

Conceitos básicos. Computação eletrônica: Gurvan Huiban

3. Linguagem de Programação C

Métodos Computacionais. Strings (Vetor de Caracteres)

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Programação de Computadores I

CURSO BÁSICO DE PROGRAMAÇÃO AULA 11. Revisão Aula Anterior Vetores Cadeia de Caracteres

Tratamento de Caracteres

Faculdade de Computação

Programação Estruturada Prof. Rodrigo Hausen Entrada e Saída Parte 2

C/C++; biblioteca stdio

Linguagem de Programação C

ECT1203 Linguagem de Programação

Apêndice B. Cadeias de Caracteres (Strings)

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Elementos de programação em C

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 3 de setembro de 2010

Linguagem de Programação C. Fluxo de Saída Padrão. Linguagem de Programação C. printf. Fluxo de Saída Padrão. Algoritmos e Lógica de Programação

Computação 2. Aula 8. Profª. Fabiany Arquivos

Entrada de Dados na Linguagem C. Professor Adolfo Neto DAINF UTFPR Agosto de 2008

Computação 2. Aula 9. Diego Addan Arquivos

modificador h instrui a função printf( ) a exibir um short int. Portanto, %hu indica que o dado é do tipo short unsigned int.

Introdução à Linguagem C

Sintaxe. Observações: #include <stdio.h> #include <conio.h> void main ( ) { int num, dobro; clrscr ( ); printf ( Digite i um número: );

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Olimpíadas de Informática Aulas preparatórias Introdução a Programação em C.

CCO 016 Fundamentos de Programação

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

Módulo 7 Cadeias de Caracteres

Programação de Computadores II. Cap. 7 Cadeias de Caracteres 1/2

Introdução à Programação C

Estrutura básica de um programa Instruções do Programa Sintaxe das instruções Diretivas apenas o contexto Variáveis e Constantes Tipos e modificadores

SSC304 Introdução à Programação Para Engenharias. Introdução a Linguagem C. GE4 Bio

Treinamento Olimpíada Brasileira de Informática

Introdução a Programação na Linguagem C.

Programação: Vetores

Manipulação de Arquivos Exercício/Exemplo:

prim = A ; prim = &A[0];

Linguagem C. Prof.ª Márcia Jani Cícero

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Funções de Entrada e Saída Formatada Constantes de barra invertida

Caracteres e Cadeias de Caracteres

Comando Switch. Embora a escada if else-if possa executar testes de várias maneiras, ela não é de maneira nenhuma elegante.

Linguagens de Programação I

Prof. Marcelo Machado Cunha Faculdade Pio Décimo

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

Computação 2. Aula 3. Diego Addan Vetores de caracteres (strings)

Programação de Computadores II. Cap. 7 Cadeias de Caracteres

Cadeias de Caracteres (Strings)

SSC304 Introdução à Programação Para Engenharias. Variáveis e I/O em C. GE4 Bio

SITUAÇÃO VETORES. Imagine o seguinte problema:

Conhecendo a Linguagem de Programação C

SCC-211 Lab. Algoritmos Avançados

Aula 2 Comandos de Decisão

Cap. 3 Entrada e Saída e Controle de Fluxo

#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 );

Linguagem C. Operadores

Variáveis, Tipos de Dados e Operadores

Olimpíadas de Informática

CCO 016 / COM 110 Fundamentos de Programação

Linguagem de Programação C

Introdução à Programação. Strings

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação

Aula 16: Manipulação de Arquivos em C

Vetores II. Strings Leitura e exibição Biblioteca string.h Operações com Strings. Matrizes Definição de Acesso Operações com Matrizes

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 13 Arquivos

Linguagem C. Introdução à Programação C. Variáveis. Identificadores. Identificadores VARIÁVEIS E TIPOS DE DADOS

Transcrição:

1616161616161616161616161616161616161616161616161616 3- ENTRADA E SAÍDA EM C Os principais meios para executar operações de entrada e saída (E/S) são: Entrada e saída pelo console (ou padrão): teclado e tela. Arquivos (leitura e escrita) As funções de biblioteca são responsáveis pela E/S. As bibliotecas padrão mais utilizadas são stdio.h e conio.h. 3.1 - Funções para manipular dados de entrada e saída padrão 3.1.1 - Leitura e escrita de caracteres getchar( ): lê o próximo caracter em um fluxo de texto. Ex.: c = getchar( ) /* c recebe o caracter */ getchar( ) é uma MACRO definida em <stdio.h> e é derivada da função getc(). #define getchar( ) getc(stdin) obs.: STDIN é a entrada padrão getchar( ) retorna EOF se ocorre algum erro. EOF também é uma MACRO, está definida em stdio.h e é igual a -1 <ctrl z> putchar( ): Imprime o conteúdo da variável c sob a forma de um caracter. Ex.: putchar(c); putchar( ) também é uma MACRO definida em <stdio.h> e é derivada da função putc(). #define putchar(c) put((c), STDOUT) obs.: STDOUT é a saída padrão 16

17 Exemplo: #include <stdio.h> main( ) { char ch; printf ( Primeiro programa \n ); ch = getchar( ); /* espera um caracter */ putchar (ch); Exemplo 2: Programa que lê um caracter e inverte a caixa deles, isto é, escreve maiúsculas como minúsculas e vice-versa. #include <stdio.h>. #include <ctype.h> main( ) { char ch; printf( Entre com um texto! Ponto para sair. \n ); do { ch = getchar( ); if ( islower(ch) ) ch = toupper(ch); else ch = tolower(ch); putchar(ch); while (ch!=. ); gets( ) e puts( ) são funções para ler e escrever strings, as mesmas serão vistas no capítulo sobre strings. 17

1818181818181818181818181818181818181818181818181818 3.1.2 - Saída formatada A função printf ( ) é responsável pela saída formatada. printf( ) especifica o que imprimir (variáveis, resultados de expressões, etc.) e como imprimir, isto é, a saída pode ser FORMATADA. Sintaxe: printf ( <formato dos elementos>, < lista de elementos >); A primeira parte dos argumentos de printf( ) está entre aspas e corresponde aos comandos de formato. Ex.: printf ( %d % 10.3f %d \n, i, a*b, 4 ); A segunda parte dos argumentos especifica a lista de elementos a serem impressos. Ex.: printf ( %d % 10.3f %d \n, i, a*b, 4 ); O símbolo % converte o número ou caracter para a forma desejada. Exemplos: printf ( %d, s ); /* %d indica que vai imprimir um inteiro */ printf ( %10d, s); /* imprime valor de s em 10 espaços */ printf ( %10.5 f, s); /* imprime um real em 10 espaços, 5 dos quais depois do ponto : 4 algarismos, ponto, 5 algarismos. */ printf( Olá! Tudo bem? \n ); /* imprime apenas a frase */ Algumas formatações: %c caracter 18

19 %d, %i inteiro decimal %u inteiro sem sinal %f ponto flutuante %lf ponto flutuante precisão dupla %e, %E real em notação científica %s cadeia de caracteres (string) %p endereço de uma variável %o octal %x hexadecimal \n nova linha \t tab \\ \ (barra) \ aspas %% % (porcentagem) Exemplo: Supor n = 18, printf ( % 5d, n ); produz a saída _ 1 8. printf ( % - 5d, n ); produz a saída 1 8 _. É possível imprimir vários valores, a formatação dos mesmos deve ser adequada. printf ( %d % 10.3f \n, i, m ); inteiro real pula linha var inteira var real 19

2020202020202020202020202020202020202020202020202020 printf( ) devolve o número de caracteres impressos ou um número negativo no caso de ocorrer algum erro. 3.1.3 - Entrada formatada A função scanf( ) é responsável pela entrada formatada. scanf( ) é muito parecida com printf( ): lê os valores e interpreta-os de acordo com o formato especificado. scanf ( <formato dos elementos>, < lista de elementos >); scanf( ) devolve o número de dados que foram lidos, se ocorrer algum erro, a mesma devolve EOF. Os símbolos utilizados para formatação são os mesmos usados na função printf( ). Na segunda parte dos argumentos, deve-se colocar o endereço & dos elementos a serem lidos. (passagem por referência) Supor a leitura de três variáveis inteiras: int dia, mês, ano; scanf ( %d %d %d, &dia, &mes, &ano); obs.: é passado o endereço das variáveis onde os valores serão armazenados. É equivalente a usar três comandos. Entrar os dados usando brancos, enter, ou tabulações scanf( ) ignora espaços em branco e tabulações (\t). scanf ( %d%d%d, &dia, &mes, &ano) também funciona. se \n for colocado será necessário digitar <enter> e EOF 20

21 Exemplos: scanf( % 2d, &x) /* Lê um inteiro de 2 dígitos e atribui seu valor a x */ scanf ( %f %d, &num, &x); /* lê um real e um inteiro, por exemplo 10.5 e 135 */ char mês[18]; scanf ( %s, mês) /* não precisa o símbolo & pois mês é nome de vetor - isto será explicado posteriormente */ para ler strings: funções gets() e puts (), serão vistas mais para frente Exercícios: 1) Faça um programa para ler 2 números reais (double), um float e um inteiro, fornecidos em uma linha e imprimi-los em uma única linha também. 2) Faça um programa para ler e imprimir 3 inteiros em linhas separadas. Para entregrar: > tar cvf lista.tar * > /home/html/inf/silvia/entrega/bin/entrega oficinac 1 lista.tar 21

2222222222222222222222222222222222222222222222222222 3.1.4 - Algumas considerações sobre a entrada de dados - Em C toda entrada e saída é feita com fluxos de entrada (streams) de caracteres organizados em linhas. Cada linha consiste de zero ou mais caracteres e termina com o caracter de final de linha. - Em ambiente Unix, digitando ^D (segure a tecla de Ctrl e pressione D) você diz ao programa que terminou a entrada de dados EOF. (end of file, final de arquivo). Em ambiente MS-Windows, você faz isto digitando ^Z (segure a tecla de Ctrl e pressione Z). - Pode haver até 254 caracteres em uma linha (incluindo o caracter de final de linha). Quando um programa inicia, o sistema operacional automaticamente define quem é a entrada padrão (geralmente o teclado) e quem é a saída padrão (geralmente a tela). - A função getchar() retorna um valor, o caractere lido (mais precisamente, o código inteiro ASCII correspondente ao caractere). - O getchar começa a ler depois que a tecla return ou enter é digitada no final de uma sequência de caracteres (dizemos que a entrada para a função getchar() está no fluxo de entrada (stream)). Considere o seguinte programa: #include <stdio.h> main(){ int ch; ch = getchar(); getchar() obtém sua entrada do teclado. Portanto, quando o programa acima é executado, o programa espera que o usuário digite alguma coisa. Cada caractere digitado é mostrado no monitor. 22

23 - O usuário pode digitar diversos caracteres na mesma linha, inclusive backspace para corrigir caracteres já digitados. - No momento que return é digitado, o primeiro caractere da sequência digitada é o resultado da função getchar(). Portanto, na instrução do programa acima o caractere (ou melhor, o seu código ASCII) é atribuído a variável ch. - Note que o usuário pode ter digitado diversos caracteres antes de teclar return, mas a função getchar() só começará a ler o que foi digitado depois que for teclado return. Além disso, com uma chamada da função getchar() só o primeiro caractere da sequência digitada é lido. - Você deve saber que o caractere de nova linha, \n, que tem o código ASCII 10, é automaticamente adicionado na sequência de caracteres de entrada quando o return é teclado. Isso não tem importância quando a função getchar() é chamada uma única vez, mas isto pode causar problemas quando ele é usado dentro de um laço. Exemplo 1: Considere o seguinte programa: #include <stdio.h> int main() { int ch; printf( "Entre com uma letra: " ); ch = getchar(); if (ch < 'A' ch > 'z' ) printf( "Voce nao teclou uma letra!" ); else printf( "Voce teclou %c, e seu codigo ASCII eh %d.\n", ch, ch ); Um exemplo da execução do programa: Entre com uma letra: A Voce teclou A, e seu codigo ASCII eh 65. No exemplo de execução acima o usuário teclou A e depois return. 23

2424242424242424242424242424242424242424242424242424 Outro exemplo de execução do programa: Entre com uma letra: AbcD Voce teclou A, e seu codigo ASCII eh 65. Neste caso o usuário digitou quatro caracteres e depois teclou return. Embora quatro caracteres tenham sido digitados, somente uma chamada a função getchar() foi feita pelo programa, portanto só um caractere foi lido. O valor atribuído ao argumento da função é o código ASCII do primeiro caractere lido. Exemplo 2: O programa abaixo conta o número de caracteres digitados (incluindo o caractere de ``próxima linha''): #include <stdio.h> int main() { int total = 0, ch; /* Le o proximo ch e para quando encontrar final do arquivo */ while ( (ch = getchar())!= EOF ) { total++; printf( "\n%d caracteres digitados\n", total ); Depois de entrar com o comando ^D você deve teclar return quando você usa getchar(), você deve teclar return no final. - Entretanto o caracter de nova linha continua no fluxo de entrada e se você executar um getchar() depois de um scanf() ou de um getchar() você lerá o caractere de nova linha deixado no fluxo de entrada. - Da mesma forma, quando você usa scanf() para ler informações, ele somente lê o que é necessário. Se voce usar scanf() para ler um número inteiro e digitar 42 (seguido de return), o scanf() lê 42, mas deixa os 2 espaços em branco (e o caractere de nova linha do return no fluxo de entrada. 24

25 - Quando o scanf() é usado em um laço. Se você digitar um valor do tipo errado, o scanf() lerá o valor errado e a execução do laço continuará na sentença após o scanf(). Na próxima iteração do laço o scanf() vai tentar ler novamente, mas o ``lixo'' deixado da iteração anterior ainda estará lá, e portanto a chamada corrente do scanf() também não dará certo. - Há uma maneira simples de resolver este problema; toda vez que você usar getchar() (para ler um caracter só) ou scanf(), você deve ler todo o ``lixo'' restante até o caractere de nova linha. Colocando as seguintes linhas após chamadas a getchar() ou scanf(), o problema é eliminado: /* Pula o restante da linha */ while( getchar()!= '\n' ); Note que isso não é necessário após todas as chamadas a getchar() ou scanf(). Só depois daquelas chamadas que precedem getchar() (ou scanf()), especialmente em um laço. - A função scanf() retorna um inteiro que é o número de itens (valores) lidos com sucesso. Você pode verificar se o scanf() funcionou testando se o valor retornado é igual ao número de especificadores de formato no primeiro argumento da função. int main() { int total = 0, num; while( total < 20 ) { printf( "Total = %d\n", total ); printf( "Entre com um numero: " ); if( scanf("%d", &num) < 1 ) /* Ignora o resto da linha */ while( getchar()!= '\n' ); else total += num; printf( "Final total = %d\n", total ); 25