【发布时间】:2015-02-22 17:35:18
【问题描述】:
我是 C 语言的新手,对十六进制、十进制数字的工作原理有点困惑。我正在尝试使用最多 4 个字节,所以 0xFFFFFFFF。我基本上希望程序在输入任何 9 位或更高位的数字时发出警报。我编写了如下代码,但它仍然允许我输入大于 0xFFFFFFFF 的数字。我究竟做错了什么?提前致谢!
int main()
{
uint32_t rgba;
printf("Enter rgba value: ");
scanf("%x", &rgba);
if (rgba > 0xFFFFFFFF){
printf("Maximum number of 8 digits!\n");
}
else{
rgba_values(rgba);
}
return 0;
}
【问题讨论】:
-
您无法检查大于存储可能的数字。 “太大的值”永远不会存储在目标变量中。如果您想允许输入此但接下来阻止它,请使用更大的类型或字符串进行输入。
-
我明白你的意思,但我将变量定义为 32 位,如果我输入更大的值,那么不会出现自动错误吗?
-
The
manpage 指出,如果出现错误,errno应设置为ERANGE,scanf应返回EOF。但是你不检查它的返回值...