當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ ungetc()用法及代碼示例


ungetc()函數采用單個字符並將其推回到輸入流中。它與getc()函數相反,後者從輸入流中讀取單個字符。另外,ungetc()是輸入函數,而不是輸出函數。
用法:

int ungetc(int char, FILE *stream)

參數:

  • char:指定要放回的字符的int提升。放回時,該值在內部轉換為無符號字符。
  • stream:指定指向標識輸入流的FILE對象的指針。

返回值:該函數返回兩種值。


  • 成功時,ungetc()函數將返回字符ch。
  • 失敗時,將返回EOF而不更改流。

有關該函數的要點:

  1. ungetc()函數將char指定的字節(轉換為無符號char)推回到stream指向的輸入流上。
  2. pushed-back字節由該流上的後續讀取按其推送的相反順序返回。
  3. 對file-positioning函數(fseek(),fsetpos()或rewind())的成功介入調用(流指向該​​流)將丟棄該流的任何pushed-back字節。
  4. 與該流相對應的外部存儲器應保持不變。
  5. 成功調用ungetc()會清除流的end-of-file指示器。
  6. 讀取或丟棄所有pushed-back字節後,流的file-position指示符的值應與推回字節之前的值相同。
  7. 每次成功調用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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。