Programação Computacional Aula 8: Entrada e Saída pelo Console Profa. Madeleine Medrano [email protected] Objetivo Apresentar conceitos básicos de entrada e saída de dados para que os exemplos e exercícios iniciais possam ser construídos. Um programa que não fornece resultados nem pede valores para operar não deve ter grande utilidade. A entrada de dados será feita pelo teclado e a saída poderá ser vista na tela do computador Roteiro Introdução Biblioteca Padrão Saída – A função printf Entrada – A função scanf Lendo e Imprimindo Caracteres Funções getchar e putchar Lendo e Imprimindo Cadeias de Caracteres Funções printf e scanf Lendo e Imprimindo Cadeias de Caracteres Com Funções gets e puts Introdução Em C, quando um programa se inicia, normalmente três fluxos ou arquivos de dados são abertos para operações de entrada e saída, um para imprimir mensagens de erro ou diagnóstico. O fluxo de entrada (entrada padrão) está conectado ao teclado ( standard input abreviadas, stdin) O fluxo de saída (saída padrão) e o de mensagens de erro, para serem visualizados estão conectados ao monitor. ( standard output abreviadas, stdout) O fluxo de erros é chamado de saída padrão de erros ( standard error output abreviadas, stderr) Biblioteca Padrão Na linguagem C não existem comandos de entrada e saída. As operações de entrada e saída são executadas com auxilio de variáveis, macros e funções especiais. Para termos acesso à biblioteca que contem estas ferramentas o programa deve conter a declaração A diretiva #include instrui o compilador a ler o arquivo indicado entre ‘<’ e ‘>’ e processá-lo como se ele fosse parte do arquivo original e seu conteúdo estivesse no ponto onde a diretiva foi escrita. Saída – A função printf A função printf faz com que dados sejam escritos na saída padrão, que normalmente é a tela do computador. O protótipo da função é: Onde os argumentos arg1, arg2 ....... São impressos de acordo com o formato indicado pela cadeia de caracteres que compõe controle. A função retorna o número de caracteres impressos, não incluindo o nulo em vetores de caracteres. No caso de um erro de saída um valor negativo é retornado. Exemplo da função printf Códigos de Conversão para escrita de dados Saída – A função printf Entre o caractere % e o código de conversão podem ser inseridos caracteres que alteram o formato. A seguir são mostrados a ordem de inserção destes caracteres e seu significado Modificadores: usados logo após o caractere % ‘-’, ‘+’ , ‘#’ , ‘0’ , Largura: especifica o tamanho mínimo do campo onde o argumento será impresso, 8 espaços são reservados para imprimir o resultados Saída – A função printf Precisão: este numero tem diferentes significados dependendo do código usado. Caracteres: especifica o número máximo de caracteres de uma cadeia de caracteres a serem impressos. Ponto flutuante: no caso do formato (e, E, f) é o numero de dígitos a serem impressos a direita do ponto, ou seja numero de casa decimais. Inteiros: no formato de inteiros (d,i,o,u,x,X) a precisão especificou o número máximo de dígitos a serem impressos. Comprimento: Modifica os formatos da seguinte maneira% L é modificado para long double, h para tipo short int, l indica que o dado é do tipo long int. Saída – A função printf Saída – A função printf Entrada – A função scanf A função scanf pode ser utilizada para entrada de dados a partir do teclado e seu protótipo é: Uma diferença fundamental que existe entre esta função e a função printf está nos argumentos que vêm depois do controle No caso de scanf os argumentos são os endereços das variáveis que irão receber os valores lidos e não, como em printf, as próprias variáveis. A indicação que estamos referenciando um endereço e não a variável se faz pelo operador &. Por exemplo, o comando espera que dois valores inteiros sejam digitados no teclado. Entrada – A função scanf Lendo e Imprimindo Caracteres Funções getchar e putchar Para ler e escrever caracteres do teclado as funções de entrada e saída mais simples são getchar e putchar, que estão na biblioteca stdio.h e cujos protótipos são os seguintes: Apesar da função getchar retornar um parâmetro inteiro é possível atribuir este valor a uma variável do tipo char porque o código do caractere esta armazenado no byte ordem mais baixa. O mesmo acontece com a função putchar que recebe um inteiro, mas somente o byte de ordem mais baixa é passado para a tela do computador. Exemplo de uso de getchar e putchar Exemplo de uso de getchar e putchar Lendo e Imprimindo Cadeias de Caracteres Uma cadeia de caracteres (string) em C é um vetor de caracteres. Os Vetores são conjuntos de caracteres em que cada um deles pode ser acessado independentemente dos outros por meio de um endereço. Para usar cadeias é preciso primeiro definir um espaço para armazená-las. Para isto é preciso declarar o nome, o tamanho e o tipo de vetor. Quando definir o tamanho do vetor de caracteres, observar que toda cadeia em C termina com o caractere NULL(‘\0’). que é automaticamente inserido pelo compilador. Portanto o vetor nome deve ser definido com um espaço a mais. Lendo e Imprimindo cadeias com scanf e printf O programa mostra como ler e imprimir uma cadeia usando os comandos scanf e printf respectivamente. Quando se usa scanf para ler uma cadeia deve-se empregar o código de conversão %s. Este comando não lê o nome todo, mas encerra a leitura dos caracteres quando encontra um caractere espaço (ou branco). Mas como ler para um vetor um nome inteiro, ou uma cadeia que contenha brancos? Para isto deve-se usar a função gets que será nosso próximo assunto. Lendo e Imprimindo cadeias com scanf e printf Lendo e Imprimindo cadeias com gets e puts Direferente do comando scanf a função gets lê toda a cadeia até que a tecla <enter> seja digitada. No vetor são colocados todos os códigos dos caracteres lidos executando-se o da tecla <enter>, que não é armazenado sendo substituído pelo código NULL. O comando que substitui o scanf é gets(nome). O protótipo da função gets é o seguinte: Lendo e Imprimindo cadeias com gets e puts A função gets retorna str caso nenhum erro ocorra. Caso o final do arquivo seja encontrado antes de qualquer caractere ser lido, o vetor permanece inalterado e um ponteiro nulo é retornado. Caso um erro ocorra durante a leitura, o conteúdo do array fica indeterminado e novamente um ponteiro nulo é retornado. A função puts tem o seguinte protótipo: Lendo e Imprimindo cadeias com gets e puts Ela imprime a cadeia apontando por str. O programa é semelhante ao exemplo anterior com as funções printf substituídas por puts. Observe que a impressão sempre termina e passa para a próxima linha. A função puts retorna um valor positivo caso nenhum erro ocorra. Em caso de erro é retornado um valor negativo. Exemplo da função gets e puts A função fgets A função gets pode abrir porta para invasões de computadores pelo fato dela não controlar o número de caracteres lidos de stdin. Apesar do usuário definir um tamanho máximo para o vetor que irá armazenar os caracteres a função ignora o limite e continua lendo valores até que o usuário digite o caractere <enter> Para evita este problema recomenda-se o emprego da função fgets cujo protótipo é A função fgets A Função fgets lê no Maximo um caractere a menos que o numero de caracteres especificados no parâmetro tam a partir do fluxo de entrada de dados. Atividades Escreva um programa que declare variáveis do tipo int, char, float inicializa-as, e imprima os seus valores. Escreva um programa que leia 3 números reais e imprima a média aritmética destes números. Faça um programa que utilize a função gets para ler duas cadeias de tamanho até 20 e em seguida às escreva na linha de baixo, uma ao lado da outra e separadas por “/-/”; Fim da apresentação Obrigada pela atenção