ungetc、ungetwcungetc, ungetwc

ストリームに文字をプッシュ バックします。Pushes a character back onto the stream.

構文Syntax

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

パラメーターParameters

cc
プッシュする文字。Character to be pushed.

一連stream
FILE 構造体へのポインター。Pointer to FILE structure.

戻り値Return Value

成功した場合、これらの各関数は、文字引数cを返します。If successful, each of these functions returns the character argument c. Cをプッシュバックできない場合、または文字が読み取られなかった場合、入力ストリームは変更されず、 ungetcEOFを返します。ungetwcWEOFを返します。If c cannot be pushed back or if no character has been read, the input stream is unchanged and ungetc returns EOF; ungetwc returns WEOF. StreamNULLの場合は、「パラメーターの検証」で説明されているように、無効なパラメーターハンドラーが呼び出されます。If stream is NULL, the invalid parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、 EOFまたはWEOFが返され、 errnoEINVALに設定されます。If execution is allowed to continue, EOF or WEOF is returned and errno is set to EINVAL.

エラー コードの詳細については、「_doserrno、errno、_sys_errlist、_sys_nerr」をご覧ください。For information on these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

RemarksRemarks

Ungetc関数は、文字cストリームにプッシュし、ファイルの終端のインジケーターをクリアします。The ungetc function pushes the character c back onto stream and clears the end-of-file indicator. ストリームは、読み取り用に開かれている必要があります。The stream must be open for reading. ストリームに対する後続の読み取り操作は、 cで始まります。A subsequent read operation on stream starts with c. Ungetcを使用してストリームにEOFをプッシュしようとすると無視されます。An attempt to push EOF onto the stream using ungetc is ignored.

Ungetcによってストリームに配置された文字は、その文字がストリームから読み取られる前にfflushfseekfsetpos、またはrewindが呼び出された場合、消去される可能性があります。Characters placed on the stream by ungetc may be erased if fflush, fseek, fsetpos, or rewind is called before the character is read from the stream. ファイル位置インジケーターの値は、文字がプッシュ バックされる前のファイル位置インジケーターの値になります。The file-position indicator will have the value it had before the characters were pushed back. ストリームに対応する外部のストレージは変更されません。The external storage corresponding to the stream is unchanged. テキストストリームに対するungetcの呼び出しが成功した場合、プッシュバックされたすべての文字が読み取りまたは破棄されるまで、ファイル位置インジケーターは指定されません。On a successful ungetc call against a text stream, the file-position indicator is unspecified until all the pushed-back characters are read or discarded. バイナリストリームに対するungetcの呼び出しが成功するたびに、ファイル位置インジケーターがデクリメントされます。呼び出しの前の値が0の場合、呼び出しの後に値が未定義になります。On each successful ungetc call against a binary stream, the file-position indicator is decremented; if its value was 0 before a call, the value is undefined after the call.

2回の呼び出しの間に読み取りまたはファイル位置の操作を行わずにungetcが2回呼び出された場合、結果は予測できません。Results are unpredictable if ungetc is called twice without a read or file-positioning operation between the two calls. Fscanfを呼び出した後に、別の読み取り操作 ( getcなど) が実行されていないと、 ungetcの呼び出しが失敗する可能性があります。After a call to fscanf, a call to ungetc may fail unless another read operation (such as getc) has been performed. これは、 fscanf自体がungetcを呼び出すためです。This is because fscanf itself calls ungetc.

ungetwcは、 ungetcのワイド文字バージョンです。ungetwc is a wide-character version of ungetc. ただし、テキストストリームまたはバイナリストリームに対して成功したungetwc呼び出しでは、プッシュバックされたすべての文字が読み取りまたは破棄されるまで、ファイル位置インジケーターの値は指定されません。However, on each successful ungetwc call against a text or binary stream, the value of the file-position indicator is unspecified until all pushed-back characters are read or discarded.

これらの関数はスレッド セーフであり、実行時に重要情報をロックします。These functions are thread-safe and lock sensitive data during execution. ロックしないバージョンについては、「_ungetc_nolock、_ungetwc_nolock」をご覧ください。For a non-locking version, see _ungetc_nolock, _ungetwc_nolock.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_ungettc_ungettc ungetcungetc ungetcungetc ungetwcungetwc

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
ungetcungetc <stdio.h><stdio.h>
ungetwcungetwc <stdio.h> または <wchar.h><stdio.h> or <wchar.h>

コンソールは、ユニバーサル Windows プラットフォーム (UWP) アプリではサポートされていません。The console is not supported in Universal Windows Platform (UWP) apps. コンソール、 stdinstdout、およびstderrに関連付けられている標準ストリームハンドルは、C ランタイム関数が UWP アプリで使用できるようになる前にリダイレクトする必要があります。The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. 互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// 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'

関連項目See also

ストリーム入出力Stream I/O
getc、getwcgetc, getwc
putc、putwcputc, putwc