ungetc, ungetwc

ストリームに文字をプッシュ バックします。

構文

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

パラメーター

c
プッシュする文字。

stream
FILE 構造体へのポインター。

戻り値

成功した場合、これらの各関数は文字引数を返します c。 プッシュ バックできない場合c、または文字が読み取られない場合、入力ストリームは変更されず、ungetc;ungetwcを返EOFしますWEOF。 有効な場合streamNULL、「パラメーターの検証」の説明に従って、無効なパラメーター ハンドラーが呼び出されます。 実行を続行できる場合、 EOF または WEOF 返された場合は 、 errno 次の値に EINVAL設定します。

これらのエラー コードおよびその他のエラー コードの詳細については、「errno_doserrno_sys_errlist_sys_nerr」を参照してください。

解説

ungetc 関数は c に文字 stream をプッシュ バックし、EOF インジケーターをクリアします。 ストリームは、読み取り用に開かれている必要があります。 後続の読み取り操作は次で stream 始まります cEOF を使用してストリームに ungetc をプッシュする操作は無視されます。

ungetc がストリームに入れた文字は、その文字をストリームから読み取る前に fflushfseekfsetpos、または rewind が呼び出されると削除されることがあります。 ファイル位置インジケーターの値は、文字がプッシュ バックされる前のファイル位置インジケーターの値になります。 ストリームに対応する外部のストレージは変更されません。 テキスト ストリームに対する ungetc の正常な呼び出しでは、プッシュ バックされたすべての文字が読み取りまたは破棄されるまで、ファイル位置インジケーターは未指定です。 バイナリ ストリームに対する ungetc の正常な呼び出しでは、ファイル位置インジケーターがデクリメントされます。呼び出し前の値が 0 の場合、呼び出しの後の値は未定義です。

ungetc を 2 回の呼び出したときに、呼び出しの間に読み取りまたはファイル位置の操作をしなかった場合は、結果は予測できません。 呼び出しfscanfの後、別の読み取り操作 (などgetc) が実行されていない限り、呼び出ungetcしが失敗することがあります。それ自体が呼び出ungetcされるためfscanfです。

ungetwc 関数は、ungetc 関数のワイド文字バージョンです。 しかし、テキスト ストリームまたはバイナリ ストリームに対する ungetwc の正常な呼び出しでは、プッシュ バックされたすべての文字が読み取りまたは破棄されるまで、ファイル位置インジケーターの値は未指定です。

これらの関数はスレッド セーフであり、実行時に重要情報をロックします。 ロックしないバージョンについては、「_ungetc_nolock_ungetwc_nolock」を参照してください。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

汎用テキスト ルーチンのマップ

TCHAR.H のルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_ungettc ungetc ungetc ungetwc

必要条件

ルーチンによって返される値 必須ヘッダー
ungetc <stdio.h>
ungetwc <stdio.h> または <wchar.h>

ユニバーサル Windows プラットフォーム (UWP) アプリではコンソールがサポートされていません。 コンソール (stdinstdoutstderr) に関連付けられている標準ストリームのハンドルは、C ランタイム関数によって UWP アプリで使用される前に、リダイレクトする必要があります。 互換性の詳細については、「 Compatibility」を参照してください。

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

関連項目

ストリーム入出力
getc, getwc
putc, putwc