C-读取十六进制数字并检查是否小于零scanf()

时间:2019-03-12 17:26:30

标签: c hex scanf

我正在用C编写一个程序,该程序使用scanf()读取十六进制数,并且我想检查该值是否有效。但是,如果我写-5,则表明输入有效。有什么简单的方法可以检查输入是否小于零,还是必须先按符号读取然后更改?

unsigned int number;
scanf("%x",&number);
if (....) {
    printf("Invalid input!\n");
}

1 个答案:

答案 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"); } }