ungetc, ungetwc

Renvoie un caractère dans le flux via une transmission de type push.

Syntaxe

int ungetc(
   int c,
   FILE *stream
);
wint_t ungetwc(
   wint_t c,
   FILE *stream
);

Paramètres

c
Caractère à renvoyer (transmission push).

stream
Pointeur vers la structure FILE .

Valeur retournée

Si elle réussit, chacune de ces fonctions retourne l’argument ccaractère . Si c elle ne peut pas être renvoyée ou si aucun caractère n’a été lu, le flux d’entrée n’est pas modifié et ungetc retourne ; retourne ungetwcEOFWEOF. Si stream c’est NULLle cas, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à continuer, EOF ou WEOF est retournée, et errno est définie sur EINVAL.

Pour plus d’informations sur ces codes d’erreur et d’autres codes d’erreur, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Notes

La fonction ungetc renvoie le caractère c à stream via une transmission de type push et efface l’indicateur de fin de fichier. Le flux doit être ouvert pour lecture. Une opération de lecture suivante commence stream par c. Une tentative de transmission de type push de EOF vers le flux à l’aide de ungetc est ignorée.

Les caractères positionnés dans le flux par ungetc peuvent être effacés si la fonction fflush, fseek, fsetpos ou rewind est appelée avant que le caractère soit lu dans le flux. L’indicateur de position de fichier prend alors la valeur qui était la sienne avant que les caractères soient renvoyés via la transmission push. Le stockage externe correspondant au flux est inchangé. Si l’appel de la fonction ungetc pour un flux de texte aboutit, l’indicateur de position de fichier n’est pas spécifié tant que tous les caractères renvoyés via une transmission push ne sont pas lus ou ignorés. À chaque appel réussi de la fonction ungetc sur un flux binaire, l’indicateur de position de fichier est décrémenté ; si sa valeur était égale à 0 avant un appel, la valeur est indéfinie après l’appel.

Les résultats sont imprévisibles si la fonction ungetc est appelée à deux reprises sans qu’aucune opération de lecture ou de positionnement de fichier n’ait lieu entre les deux appels. Après un appel à fscanf, un appel peut ungetc échouer, sauf si une autre opération de lecture (par exemple getc) a été effectuée, car fscanf elle appelle elle-même ungetc.

ungetwc est une version à caractères larges de ungetc. Cependant, à chaque appel réussi de la fonction ungetwc sur un flux de texte ou binaire, la valeur de l’indicateur de position de fichier n’est pas spécifié tant que tous les caractères renvoyés via une transmission push ne sont pas lus ou ignorés.

Ces fonctions sont thread-safe et verrouillent les données sensibles pendant l’exécution. Pour obtenir une version non verrouillée, consultez _ungetc_nolock, _ungetwc_nolock.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Mappages de routine de texte générique

Routine TCHAR.H _UNICODE et _MBCS non défini _MBCS Défini _UNICODE Défini
_ungettc ungetc ungetc ungetwc

Spécifications

Routine En-tête requis
ungetc <stdio.h>
ungetwc <stdio.h> ou <wchar.h>

La console n’est pas prise en charge dans les applications plateforme Windows universelle (UWP). Les handles de flux standard associés à la console, stdinet stdoutstderrdoivent être redirigés avant que les fonctions d’exécution C puissent les utiliser dans les applications UWP. Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_ungetc.c
// This program first converts a character
// representation of an unsigned integer to an integer. If
// the program encounters a character that is not a digit,
// the program uses ungetc to replace it in the  stream.
//

#include <stdio.h>
#include <ctype.h>

int main( void )
{
   int ch;
   int result = 0;

   // Read in and convert number:
   while( ((ch = getchar()) != EOF) && isdigit( ch ) )
      result = result * 10 + ch - '0';    // Use digit.
   if( ch != EOF )
      ungetc( ch, stdin );                // Put nondigit back.
   printf( "Number = %d\nNext character in stream = '%c'",
            result, getchar() );
}

      521aNumber = 521
Next character in stream = 'a'

Voir aussi

E/S de flux
getc, getwc
putc, putwc