首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ungetc()的意外行为

使用ungetc()的意外行为
EN

Stack Overflow用户
提问于 2017-03-28 06:19:56
回答 1查看 46关注 0票数 0

我用以下代码输入stdin "11+3“

代码语言:javascript
复制
void main(void) {
    int number;
    printf("the first call : %d\n", scanf("%d", &number));
    char ch = fgetc(stdin);
    ungetc(ch, stdin);
    printf("the second call : %d\n", scanf("%d", &number));
}

结果在我看来很奇怪,,因为第二个 scanf() 应该失败了。在Ubuntu5.4.0-6 ubuntu1~16.04.4下使用gcc 5.4.0 20160609。

代码语言:javascript
复制
the first call : 1
the second call : 1
EN

回答 1

Stack Overflow用户

发布于 2017-03-28 06:35:09

因为第二个scanf()应该失败了。

不是的。你给它提供了完全有效的输入。

scanf解析输入,直到输入满足或到达定界符为止。

在第一次调用scanf时,它将"11“解析为数字11,然后得出结论,因为下一个数字不是输入满意的数字的一部分。

在第二次对scanf的调用中,它将"+3“解析为数字3,这是整数形式的正数3的有效表达式。就像"- 3“代表负数3一样。

但是,正如注释中提到的那样,传递"11+ 3“将导致第二次扫描失败,因为它将尝试将"+”解析为整数(+后面的空格被计算为分隔符)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43061959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档