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 c
caractè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 ungetwc
EOF
WEOF
. Si stream
c’est NULL
le 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
_doserrno
et _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, stdin
et stdout
stderr
doivent ê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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour