ungetc()函數采用單個字符並將其推回到輸入流中。它與getc()函數相反,後者從輸入流中讀取單個字符。另外,ungetc()是輸入函數,而不是輸出函數。
用法:
int ungetc(int char, FILE *stream)
參數:
- char:指定要放回的字符的int提升。放回時,該值在內部轉換為無符號字符。
- stream:指定指向標識輸入流的FILE對象的指針。
返回值:該函數返回兩種值。
- 成功時,ungetc()函數將返回字符ch。
- 失敗時,將返回EOF而不更改流。
有關該函數的要點:
- ungetc()函數將char指定的字節(轉換為無符號char)推回到stream指向的輸入流上。
- pushed-back字節由該流上的後續讀取按其推送的相反順序返回。
- 對file-positioning函數(fseek(),fsetpos()或rewind())的成功介入調用(流指向該流)將丟棄該流的任何pushed-back字節。
- 與該流相對應的外部存儲器應保持不變。
- 成功調用ungetc()會清除流的end-of-file指示器。
- 讀取或丟棄所有pushed-back字節後,流的file-position指示符的值應與推回字節之前的值相同。
- 每次成功調用ungetc()都會使file-position指標遞減,如果在調用前其值為0,則在調用後未指定其值。
以下示例程序旨在說明上述函數。
示例1:
#include <stdio.h>
int main()
{
FILE* f;
int char;
char buffer[256];
// read a file
f = fopen("use1.txt", "r");
// when no data
if (f == NULL) {
printf("Error in opening file");
return (-1);
}
// read lines till end
while (!feof(f)) {
// get line
char = getc(f);
// replace ! with +
if (char == '!') {
ungetc('+', f);
}
// if not
else {
ungetc(c, f);
}
fgets(buffer, 255, f);
fputs(buffer, stdout);
}
return 0;
}
假設我們有一個文本文件use1.txt,其中包含以下數據。該文件將用作示例程序的輸入,然後輸入和輸出如下所示:
Input: !c standard library !library function stdio.h-ungetc() Output: +c standard library +library function stdio.h-ungetc()
示例2:
// C program for taking input till we
// get 1 at the input
#include <stdio.h>
int main()
{
int ch;
// reads characters from the stdin and show
// them on stdout until encounters '1'
while ((ch = getchar()) != '1')
putchar(ch);
// ungetc() returns '1' previously
// read back to stdin
ungetc(ch, stdin);
// getchar() attempts to read
// next character from stdin
// and reads character '1' returned
// back to the stdin by ungetc()
ch = getchar();
// putchar() displays character
putchar(ch);
return 0;
}
相關用法
注:本文由純淨天空篩選整理自Swati Bararia大神的英文原創作品 ungetc() in C/C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。