1.5.1 File Copying

(P. 18) Com getchar e putchar, você pode escrever uma quantidade surpreendente útil de codigos sem saber nada mais sobre entrada e saída. O mais simples exemplo é um programa que copia sua entrada para a saída um caractere por vez:

leia um caracter
    enquanto (o caractere não é o indicador de fim de arquivo)
    saída de caracter que acabou de ler
    ler um caractere

Convertendo isso em C nos dá

#include 

/* copy input to output; 1st version */
main
{
    int c;
	
    c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar ();
    }
}

O operador relacional != significa “não é igual a”.O que parece ser um caracter no teclado ou tela é, naturalmente, como tudo mais, armazenado internamente apenas como um padrão de bits. O tipo char é especificamente destinado a armazenar esses dados de caracteres, mas qualquer tipo de número inteiro pode ser usado. Nós usamos int por uma razão sutil, mas importante. O problema é distinguir o final da entrada de dados válidos. A solução é que o getchar retorna um valor distintivo quando não há mais entrada, um valor que não pode ser confundido com nenhum caracter real. Esse valor é chamado EOF, para “end of file”. Devemos declarar c ser um tipo grande o suficiente para manter qualquer valor que o getchar retorna. Não podemos usar char porque c deve ser grande o suficiente para manter o EOF além de qualquer caractere possível. Portanto, usamos int.

(P. 19) EOF é um inteiro definido em , mas o valor numérico específico não importa, desde que não seja o mesmo que qualquer valor de caracteres. Ao usar a constante simbólica, temos a certeza de que nada no programa depende do valor numérico específico. O programa para cópia seria escrito de forma mais concisa por programadores C experientes. Em C, qualquer atribuição, como c = getchar();é uma expressão e tem um valor, que é o valor do lado esquerdo após a atribuição. Isso significa que uma tarefa pode aparecer como parte de uma expressão maior. Se a atribuição de um caractere para c for colocada dentro da parte de teste de um loop while, o programa de cópia pode ser escrito dessa maneira:

#include 
/* copy input to output; 2nd version */
main()
{
	int c;
	while ((c = getchar()) != EOF)
		putchar(c);
}
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s