gpt4 book ai didi

c - ungetc() 的意外行为

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

我使用以下代码将其输入到stdin“11+3”,并且

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()应该失败。仅供引用,我在Ubuntu 5.4.0-6ubuntu1~16.04.4下使用了gcc 5.4.0 20160609。

the first call : 1
the second call : 1

最佳答案

because the second scanf() should have failed.

没有。您向其提供了完全有效的输入。

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

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

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

正如评论中提到的,传递“11+ 3”会导致第二个 scanf 失败,因为它会尝试将“+”解析为整数(+ 后面的空格被视为分隔符)。

关于c - ungetc() 的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43061959/

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