c++ - 使用 scanf 过滤掉负数

标签 c++ scanf unsigned

我的目标是扫描一些只有正数的a,如果输入负数,该函数应该打印错误:

if ( scanf("%u %lf", &a, &b) != 2 ) {
    //error
}

现在的理论是 scanf 返回成功的写入尝试,因此如果我输入负数,scanf 不应返回 2。我的理论似乎不正确,为什么?

显然我可以简单地 scanf %d 然后检查 %d 是否为负,但现在我很好奇为什么我最初的理论是不正确的。那么有没有一种不用扫描然后比较的方法呢?

最佳答案

你的理论不起作用,因为 scanf 不会失败,也不会拒绝将用户输入复制到指定的内存地址,即使在需要无符号数字时输入有符号数字也是如此。因此,根据scanf文档中,scanf 将返回复制到提供的内存地址的项目数。

关于c++ - 使用 scanf 过滤掉负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41155427/

相关文章:

c++ - 如何在数组中的整数 ADT 堆栈中找到最大值

c++ - FFmpeg 卡在缓冲区填充 C++

c++ - 替换 __LINE__ 宏

c++ - 返回指向层序二叉树中第 n 个节点的指针

c++ - 在流开头的空行上使用 scanf 了解 getline() 的行为

c - 第二个 scanf for 字符不起作用

c - 为什么scanf将字符串放入char数组,直接输入却不行?

c++ - 了解负数并转换它们

c++ - 模数和无符号整数

math - 有符号整数中的前导 1 表示负数从何而来?