Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Opracował: Piotr DejaVu Szawdyński
Język C++

ungetc

[funkcja] Określa pierwszy znak jaki ma zostać zwrócony przez następną operację odczytu danych ze strumienia.

Składnia

C/C++
#include <cstdio>

int ungetc( int character, FILE * stream );

Argumenty

ArgumentOpis
int characterPierwszy znak jaki ma zostać zwrócony przez następną operację odczytu danych ze strumienia.
FILE * streamOkreśla strumień na którym ma zostać wykonana operacja.

Zwracana wartość

Zwraca znak przekazany do funkcji poprzez argument character w przypadku sukcesu. Funkcja zwraca wartość » standard CEOF w przypadku wystąpienia błędu.

Opis szczegółowy

Funkcja umożliwia określenie pierwszego znaku jaki ma zostać zwrócony przez następną operację odczytu danych ze strumienia. Znak umieszczony w strumieniu za pomocą niniejszej funkcji jest kasowany w chwili wywołania funkcji » standard Cfflush, » standard Cfseek, » standard Cfsetpos lub » standard Crewind. Wywołanie niniejszej funkcji nie modyfikuje danych strumienia, lecz jedynie zachowanie funkcji odczytujących dane. Funkcja musi być wywoływana na poprawnym i jednocześnie otwartym strumieniu danych.

Dodatkowe informacje

  • Każde wywołanie niniejszej funkcji musi być poprzedzone poprawną operacją odczytu.
  • Zachowanie funkcji jest niezdefiniowane w przypadku jej dwukrotnego wywołania pod rząd.
  • Zachowanie funkcji jest niezdefiniowane w przypadku próby wykonania operacji na strumieniu na którym nie wykonano poprawnej operacji odczytu danych bezpośrednio przed wywołaniem niniejszej funkcji.
  • Wywołanie funkcji nie modyfikuje danych strumienia - funkcja modyfikuje jedynie zachowanie funkcji odczytujących dane.

Uwaga!
Wywołanie niniejszej funkcji ma również niezdefiniowane zachowanie wtedy, gdy zostanie ona wywołana bezpośrednio po funkcjach, których wewnętrzna implementacja korzysta z funkcji ungetc (np. funkcja » standard Cfscanf).

Przykład

C/C++
#include <cstdio>

int main()
{
    FILE * pPlik = fopen( "plik.txt", "r" );
    if( pPlik )
    {
        while( !feof( pPlik ) )
        {
            int znak = getc( pPlik );
            if( znak == EOF )
                 break;
           
            //zamień odczytany znak na inny, jeżeli odczytanym znakiem jest '$'
            if( znak == '$' )
                 znak = '#';
           
            //wstaw znak do bufora
            printf( "Wstawiam znak '%c'\n", znak );
            ungetc( znak, pPlik );
           
            //odczytaj wiersz danych ze strumienia
            char bufor[ 128 ];
            if( fgets( bufor, 127, pPlik ) )
                 printf( "Odczytano: \"%s\"\n", bufor );
           
        } //while
        fclose( pPlik );
    } //if
    return 0;
}

Zagadnienia powiązane

EOFEnd of File - plik został przeczytany do końca, bądź wystąpił błąd podczas próby odczytu danych. (makro)
getcWczytuje znak ze strumienia. (funkcja)
putcZapisuje znak do strumienia. (funkcja)

Linki zewnętrzne