C 帮助 - 当用户输入无符号整数时检查范围和负数

标签 c binary range

我发布了 this两天前,但由于我的问题已更改为其他问题,现在我需要有关代码中新问题的帮助,我认为发布新帖子是可以的。如果我错了,请关闭这个问题;我是社区的新手,不想惹任何麻烦。我只是想得到一些帮助来解决我的问题。

我收到了一些反馈:我知道这段代码有两个问题:我需要检查用户的输入是否在范围内(0~2^32 - 1;如果不在范围内,它收到“警告”消息),我需要检查负数(这些应该收到“无效”警告)。但我完全被难住了。我能否在使用我的代码来完成上述两件事时获得更多帮助?

更新:我认为这段代码终于成功了。如果我忽略了编译后未显示的错误,请告诉我。谢谢!

#include <stdio.h>

int main() {
long long int num;
int count = 0;

printf("Please enter an integer: ");
scanf("%lld", &num);

if (num >= 0 && num <= 4294967295) {
    while(num){
        count += num & 1;
        num >>= 1;
    }
    printf("%d\n", count);
} else {
    printf("Warning: this is not a valid integer\n");
}
return 0;
}

最佳答案

使用 scanf might be problematic and dangerous .更好的方法是使用 fgets 从用户那里获取输入,然后使用 strtoul/strtoul 将字符串转换为整数。

关于C 帮助 - 当用户输入无符号整数时检查范围和负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46333297/

相关文章:

c - 为什么在 c 中 sizeof(0.7)=8 字节?

c# - 对于每个位数组并将位数字插入数据库的更快方法

java - 将 Long.MAX_VALUE 转换为 Float

excel - 使用范围(单元格 1 值,单元格 2 值)-VBA

ruby - 比较 Ruby 中的范围

使用 void 指针连接两个数组 (C)

c - 在 C 中返回没有指针的结构数组

c - 关于 LINUX 中的段错误

math - 如何将无符号数从有符号数转换为无符号数(二进制和十六进制)?

generics - 前向差分算法