当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。