共用方式為


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 函式推後字元 c 在 stream 上並清除檔案結尾指示器。 資料流必須開啟為唯讀。 在 stream 上執行後續讀取作業開頭為 c*。*嘗試推入至資料流上的 EOF 使用 ungetc 被忽略。

可能會清除資料流位置的字元則為 ungetc ,如果 fflush、 fseek、 fsetpos或 rewind 呼叫,在字元從目前資料流讀取。 其檔案位置指示器會有值,在字元會推回之前。 與資料流相對應的外儲存不變。 在物件的文字資料流的成功呼叫 ungetc ,檔案位置指示器是未指定的,直到所有被推回的字元讀取或捨棄。 在對二進位資料流的每次成功呼叫 ungetc ,檔案位置指示器遞減;如果其值為 0,則在呼叫,值會在呼叫後未定義。

ungetc ,如果呼叫兩次,而兩個呼叫之間,的讀取或檔案當地語系化作業結果無法預期。 在對 fscanf的呼叫,對 ungetc 的呼叫可能會失敗後,除非另一次讀取作業 (例如 getc) 執行。 這是因為, 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 市集 應用程式不支援。 標準資料流控制代碼與主控台, stdin, stdout和 stderr,在這種情況下, C 執行階段函式在 Windows 市集 應用程式之前,可以使用它們必須重新導向。 如需其他相容性資訊,請參閱入門介紹中的 相容性 (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() );
}
  

.NET Framework 對等用法

不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需更多的資訊,請參閱 Platform Invoke Examples

請參閱

參考

資料流 I/O

getc getwc

putc putwc