我正在用C编写一个程序,该程序使用scanf()
读取十六进制数,并且我想检查该值是否有效。但是,如果我写-5,则表明输入有效。有什么简单的方法可以检查输入是否小于零,还是必须先按符号读取然后更改?
unsigned int number;
scanf("%x",&number);
if (....) {
printf("Invalid input!\n");
}
答案 0 :(得分:0)
是否有一些简单的方法来检查输入是否小于零
react-native run-android
接受"%x"
之类的输入,并形成"-123"
的{{1}}正值。因此,仅凭这一点还不够。
或者,您自己寻找unsigned
。
以下使用UINT_MAX + 1 - 123
检测超过1个或多个'-'
的扫描是否成功(用"%n"
扫描)。如果没有前导'-'
,则仅消耗前导空格,并且"%*[-]"
保持为0。
'-'
不清楚发生无效输入时OP想要做什么。
更好的方法是使用n
读取一行用户输入,然后对其进行解析。
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);
}
更好的代码将使用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");
}
}
。