gpt4 book ai didi

c - Scanf() 无法检测到错误的输入

转载 作者:行者123 更新时间:2023-12-02 01:34:08 26 4
gpt4 key购买 nike

int i, f;
f = scanf("%d", &i);

当我输入3333333333333333333333时(大于int的容量)。 f 的值不应该是 0 吗?

最佳答案

Shouldnt the value of f be 0?

对于标准 C,没有。对于 scanf("%d",&i),在 int 溢出时,结果是未定义

Unix 中使用 scanf() (其中存在变体),我发现无法防止溢出的未定义行为。

最好放弃(不使用)scanf() 并使用 fgets() 来处理所有用户输入。


代码可以尝试文本宽度限制和更宽的类型:

intmax_t bigd;
// vv --- width limit
if (scanf("%18jd",&bigd) == 1 && bigd >= INT_MIN && bigd <= INT_MAX) {
d = (int) bigd;
} else {
puts("Oops");
}

然而,这在 intintmax_t 一样宽的新颖实现上遇到了麻烦。


scanf() 当未找到 int 文本输入时返回 0。

OP 的问题中缺少的一个关键设计元素是,超出 int 范围的用户输入会发生什么情况?在第一个“333333333”之后停止阅读?

什么是最好的,取决于 OP 希望如何详细处理错误情况 - 尚未说明。

关于c - Scanf() 无法检测到错误的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72804037/

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