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 。