我正在用C编写程序,该程序使用scanf()
读取十六进制数,并且我想检查该值是否有效。但是,如果我写-5,则表明输入有效。是否有一些简单的方法可以检查输入是否小于零,还是必须先读取带符号的符号然后进行更改?
unsigned int number;
scanf("%x",&number);
if (....) {
printf("Invalid input!\n");
}
最佳答案
有一些简单的方法可以检查输入是否小于零"%x"
接受类似"-123"
的输入,并形成unsigned
的UINT_MAX + 1 - 123
正值。因此,仅凭这一点还不够。
或者,您自己寻找'-'
。
下面使用"%n"
检测是否通过1个或多个'-'
扫描成功(使用"%*[-]"
扫描)。如果没有前导'-'
,则仅消耗前导空格,并且n
保持为0。
int n = 0;
scanf(" %*[-]%n", &n);
if (n) {
printf("Invalid negative input!\n");
} else if (scanf("%x",&number) != 1) {
printf("Invalid non-hex input!\n");
} else {
printf("Success %x\n", number);
}
不清楚如果发生无效输入,OP想要做什么。
更好的方法是使用
fgets()
读取一行用户输入,然后进行解析。 char buf[80];
if (fgets(buf, sizeof buf, stdin) {
unsigned int number;
if (strchr(buf, '-') == NULL && sscanf(buf, "%x", &number) == 1) {
printf("Success %x\n", number);
} else {
printf("Fail\n");
}
}
更好的代码将使用
strtoul()
而不是sscanf()
。关于c - C-读取十六进制数字并检查是否小于零scanf(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55127405/