gpt4 book ai didi

c - scanf 未终止

转载 作者:行者123 更新时间:2023-11-30 16:03:58 26 4
gpt4 key购买 nike

因此,我得到了以下代码 (C):

char c = getc(in);
if (c == '(')
...
if (c == '%')
...
if (isdigit(c))
{
int n;
ungetc(c, in);
scanf("%i", &n);
...
}

当我从 stdin 读取输入时,一切都很好,但是,当从文件读取输入时,对 scanf 的调用不会终止。

我在调用周围添加了一些代码,以查看调用 scanf 之前发生了什么。其中一个例子是

  1. c = '0'
  2. c 后面的字符是 )

ungetc之后缓冲区是否没有刷新?可能会发生什么情况,当输入是 stdin 时它工作正常,但当输入是文件时却不能? (我对 C 中的 IO 不太熟悉)。

编辑:应该使用fscanf...男孩我的脸红了。

最佳答案

  1. getc() 当您到达末尾或发生错误请务必检查一下。您的 c 必须是 int,而不是 char 才能区分 EOF。

  2. 同样适用于 scanf 检查其EOF 的返回值。对于扫描转换也可能失败,scanf("%i", &n) 应返回 1 如果它成功解析了一些东西进入 n 所以一定要检查也是如此。1.

  3. 您也在 in 上进行操作,如在 getc(in) 中,建议您从特定的 FILE* 读取,但是你的 scanf 调用仍然显示来自标准输入。

    使用fscanf而不是那里的 scanf

关于c - scanf 未终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3654820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com