ungetc() — 入力ストリームへの文字のプッシュ

フォーマット

#include <stdio.h>
int ungetc(int c, FILE *stream);

言語レベル: ANSI

スレッド・セーフ: はい。

説明

ungetc() 関数は、符号なしの文字 c を 指定された入力 stream にプッシュ・バックします。ただし、連続して ungetc() を呼び出す場合は、 入力ストリームへのプッシュ・バックを保証できる連続した文字は 1 つのみです。 stream は、読み取りのためにオープンしていなければ なりません。stream での以降の読み取り操作は、 c から開始します。文字 c を EOF 文字にすることはできません。

ungetc() でストリームに配置された文字は、stream から読み取られる前に、 fseek()fsetpos()rewind()、または fflush() が呼び出された場合は消去されます。

戻り値

ungetc() 関数は、c をプッシュ・バックできなかった場合に、 unsigned char、または EOF に変換された整数引数 c を戻します。

errno の値は、次のいずれかに設定されます。

意味
ENOTREAD
ファイルは読み取り操作用にオープンされていません。
EIOERROR
リカバリー不能な入出力エラーが発生しました。
EIORECERR
リカバリー可能な入出力エラーが発生しました。

ungetc() 関数は、type=record を指定してオープンしたファイルについてはサポートされません。

ungetc() の使用例

この例では、while ステートメントが算術ステートメントを使用して 入力データ・ストリームから 10 進数を読み取り、読み取り時の数字の 数値を構成します。ファイルの終わりまでに非数字が検出される場合、 ungetc() は、後の入力関数が処理を実行できるように、 入力ストリーム内でそれを置き換えます。

#include <stdio.h>
#include <ctype.h>
 
int main(void)
{
   FILE *stream;
   int ch;
   unsigned int result = 0;
   while ((ch = getc(stream)) != EOF && isdigit(ch))
      result = result * 10 + ch - '0';
   if (ch != EOF)
      ungetc(ch,stream);
         /* Put the nondigit character back */
   printf("The result is: %d¥n", result);
   if ((ch = getc(stream)) != EOF)
      printf("The character is: %c¥n", ch);
}

関連情報



[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]