c - 如何使用 C 的 FILE* 描述符安全地 'unget' 字符

标签 c input

假设您需要读取在 C 中形成十进制整数的字符序列,但您不能使用 fscanf() 。该程序将使用以下八位字节进行测试:

0x31 0x35 0x30 0x0a

或者简单地说:

150\n

如何确保只提取前三个字节?换句话说,将来调用fgetc()必须返回0x0a 。这与使用 fscanf("%d") 的行为完全相同。然后fgetc() .

最佳答案

要安全地“取消”角色,请确保

  1. 仅在获得角色后使用一次。保证了一个推回特性。额外的调用可能不起作用。

  2. 确保推回的值在unsigned char范围内。推回 EOF 会导致流不变。

示例:

unsigned sum = 0;
int ch;
while (isdigit(ch = fgetc(stdin))) {
  sum += ch - '0';
}
ungetc(ch, stdin);

关于c - 如何使用 C 的 FILE* 描述符安全地 'unget' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38709868/

相关文章:

c - 如何使用指针和 malloc 将字符存储到数组中?

c - 在 C 中,给定一个可变的参数列表,如何使用它们构建函数调用?

java - 我可以从 Java 调用 C 可执行文件的函数吗?

java - 在 Java 中使用 do-while 循环检查用户的输入

Java HTML 输入表单名称

javascript - 输入框乘以2的结果出现在窗口中而不是div中

c - 缓冲区溢出缓冲区长度

c - 如何在 Linux 中使用 makefile 编译多个 c 文件 - 出现变量错误

html - 使输入的宽度因窗口调整大小而改变,并使用它之前的动态标签宽度

c++ - 有没有标准的 Linux C++ 输入库可供使用?