ungetc、ungetwc
ストリームに文字を押し戻します。
int ungetc(
int c,
FILE *stream
);
wint_t ungetwc(
wint_t c,
FILE *stream
);
パラメーター
c
押されたする文字。stream
FILE 構造体へのポインター。
戻り値
成功すると、これらの関数は文字引数 cを返します*。*c が押し戻すできない場合、または文字が読まれなかったら、入力ストリームは変更不可と ungetc を返します。EOF; ungetwc を返します WEOF。stream が NULL の場合は、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。実行の継続が許可 EOF か WEOF はを返し、errno は EINVALに設定されます。
エラー コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。
解説
ungetc 関数は stream に文字 c を押し戻し、ファイルの終端のインジケーターをオフにします。ストリームは、読み取りのために開いている必要があります。cの stream の二重起動されたときに、読み取り操作*。*ungetc を使用してストリームに EOF を押す操作は無視されます。
ungetc に、ストリームに設定されている文字は、文字をストリームから読み取る前に fflush、fseek、fsetpos、または rewind が呼び出されるとオフの場合があります。ファイル位置のインジケーターに文字が押し戻された前の値があります。ストリームに対応する外部のストレージは変更されません。テキスト ストリームに対する ungetc の正常な呼び出しで、ファイル位置のインジケーターが押し戻されたすべての文字が、読み取りまたは破棄まで未指定です。バイナリ ストリームに対する ungetc の成功するたびにの呼び出しで、ファイル位置のインジケーターがデクリメントされます; は、値が呼び出しの後で未定義にする前に値が 0。
結果は ungetc を 2 回の呼び出しの間に読み取られたファイルまたは配置操作せずに回呼び出すと予測できません。複数の読み取り操作が getc (など) 正しい fscanfの呼び出し、ungetc の呼び出しが失敗する可能性がなくなります。これは fscanf 自体が ungetcを呼び出すためです。
ungetwc は ungetcのワイド文字バージョンです。ただし、テキストまたはバイナリ ストリームに対する ungetwc のそれぞれの正常な呼び出しに、ファイル位置のインジケーターの値は、すべての押し戻された文字が、読み取りまたは破棄まで未指定です。
これらの関数は実行時にスレッド セーフおよびロックの重要情報です。ロックしないバージョンについては、_ungetc_nolock、_ungetwc_nolockを参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_ungettc |
ungetc |
ungetc |
ungetwc |
必要条件
ルーチン |
必須ヘッダー |
---|---|
ungetc |
<stdio.h> |
ungetwc |
<stdio.h> または <wchar.h> |
コンソールは Windows ストア の apps ではサポートされていません。コンソール、stdin、stdout、および stderrに関連付けられている標準ストリームのハンドルは C のランタイム関数が Windows ストア の apps で使用する前にをリダイレクトする必要があります。互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// 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() );
}
同等の .NET Framework 関数
該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。