C++ 中的ungetc() 函数将先前读取的字符推回流中,以便可以再次读取它。
ungetc() 函数在<cstdio> 头文件中定义。
ungetc()原型
int ungetc(int ch, FILE* stream);
ungetc() 函数将字符 ch
推回与文件流关联的缓冲区,除非 ch
等于 EOF。如果ch
等于EOF,则操作失败并且流中没有变化。
如果多次调用 ungetc() 而中间没有任何读取或重新定位操作,则调用可能会失败。
如果对ungetc() 的调用成功,则清除文件结束状态标志 feof。
对于二进制流,成功调用 ungetc 会将流位置指示符减一。如果流位置指示符为零,则行为是不确定的。
对于文本流,成功调用 ungetc 会以未指定的方式修改流位置指示符。但可以保证,在通过读取操作检索到所有pushed-back 字符之后,流位置指示符等于调用ungetc() 之前的值。
参数:
ch
: 被推回的角色。stream
:角色被推回的文件流。
返回:
- 成功时,ungetc() 函数返回字符
ch
。 - 失败时返回 EOF 而不更改流。
示例:ungetc() 函数如何工作?
#include <cstdio>
#include <cctype>
#include <iostream>
using namespace std;
int main()
{
int c;
long value = 0;
char str[] = "101axc";
FILE *fp = fopen("file.txt", "r+");
fputs(str,fp);
rewind(fp);
while(1)
{
c = fgetc(fp);
if (isdigit(c))
value = value*10 + c - '0';
else
break;
}
ungetc(c, fp);
cout << "Value = " << value << endl;
fclose(fp);
return 0;
}
运行程序时,可能的输出将是:
Value = 101
相关用法
- C++ ungetc()用法及代码示例
- C++ ungetwc()用法及代码示例
- C++ unordered_map cbegin用法及代码示例
- C++ unordered_set max_bucket_count()用法及代码示例
- C++ unordered_multimap reserve()用法及代码示例
- C++ unordered_multiset get_allocator用法及代码示例
- C++ unordered_set swap()用法及代码示例
- C++ unordered_multimap rehash()用法及代码示例
- C++ unordered_set equal_range用法及代码示例
- C++ unordered_map rehash用法及代码示例
- C++ unordered_map emplace_hint()用法及代码示例
- C++ unordered_map key_eq()用法及代码示例
- C++ unordered_multiset cend()用法及代码示例
- C++ unordered_multimap get_allocator用法及代码示例
- C++ unordered_map clear用法及代码示例
- C++ unordered_multimap begin()、end()用法及代码示例
- C++ unordered_multimap hash_function()用法及代码示例
- C++ unordered_multiset insert()用法及代码示例
- C++ unordered_multiset end()用法及代码示例
- C++ unordered_set get_allocator()用法及代码示例
注:本文由纯净天空筛选整理自 C++ ungetc()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。