ungetc  função

Protótipo

int ungetc (int caractere, FILE * fluxo);

Descrição

Insere o caractere de volta ao fluxo de entrada apontado por fluxo.

Esse caractere será retornado na próxima chamada de leitura ao fluxo. Caso a função fflush ou funções que alterem o posicionamento do fluxo (fseek, fsetpos ou rewind) sejam chamadas antes da próxima operação de leitura, o caractere inserido é descartado.o caractere presente na posição atual do fluxo interno. Após a leitura, a posição atual é avançada para o próximo caractere.

Algumas implementações suportam que essa função seja chamada múltiplas vezes. Entretanto, esta funcionalidade não é portável; o padrão C garante que apenas uma chamada (por vez) desta função obtenha sucesso. Não é necessário que a implementação da biblioteca padrão suporte múltiplas chamadas de ungetc para ser conformante.

Em caso de sucesso, a função ungetc limpa o indicador de EOF do fluxo. Esta função afeta apenas operações de leitura no fluxo, não alterando o fluxo "físico" (como, por exemplo, arquivos).

Caso seja passado EOF como argumento no caractere, a função falha e o fluxo não é modificado. Não é necessário que o caractere passado seja o último lido – qualquer caractere é válido.

Parâmetros

c - O caractere que deverá ser inserido de volta ao fluxo. Este valor é convertido internamente para um unsigned char antes de ser colocado de volta.

fluxo - Ponteiro para um objeto FILE que será utilizado como fluxo de entrada.

Valor de retorno

Em caso de sucesso, a função retorna o caractere que foi jogado de volta ao fluxo. O valor é retornado como um unsigned char convertido para um int.

Em caso de falha, a função retorna EOF.

Exemplo

O programa a seguir lê o conteúdo do arquivo.txt e o imprime na tela, substituindo, na impressão, todos os espaços por uma nova linha.

#include <stdio.h>

int main() {
    FILE* arquivo = fopen("arquivo.txt", "r");
    if(arquivo == NULL) {
        fprintf(stderr, "Erro ao abrir o arquivo.txt.");
        return 1;
    }

    int caractere = getc(arquivo);
    while(caractere != EOF)
        if(caractere == ' ') {
            /* substitui todo espaço por uma nova linha */
            ungetc('\n', arquivo);
        } else {
            ungetc(caractere, arquivo);
        }

        putchar(getchar(arquivo));
        caractere = getc(arquivo);
    }
    fclose(arquivo);

    return 0;
}
Veja também

getc função

putc função