如何检查收到的Scanf?

时间:2018-11-18 22:40:18

标签: c scanf

程序应允许两种不同的模式,并根据从用户那里收到的内容计算不同的内容。 可以说模式是:

  

x <12; 23>

  

<12; 23>

如果包含'x',则程序会将间隔转换为二进制,否则不将其转换为十二进制。 但是,如果用户添加了该怎么办?

我有一个寻找“ x”的代码

    int a;
    int b;
    char x;
    char one;
    char dot;
    char two;

  if((scanf(" %c %c %ld %c %ld %c", &x,&one,&a,&dot,&b, &two)!=6)||(x!='x')||(one!='<')||(dot!=';')||(two!='>')){
      printf("Wrong input");
  }
  else{
      /*Convert to binary*/
  }

编辑:更改间隔的数字以使其更容易理解

1 个答案:

答案 0 :(得分:1)

只需在scanf中指定格式即可。

int read_input(int *a, int *b)
{
   int ret;
   ret = scanf(" x <%d;%d>", a, b)
   if (ret < 0) return -__LINE__;
   if (ret == 2) {
       return 1;
   }
   ret = scanf(" <%d;%d>", a, b);
   if (ret < 0) return -__LINE__;
   if (ret == 2) {
       return 2;
   }
   return -__LINE__;
}

int main() {
   int a, b;
   while(1) {
       int ret = read_input(&a, &b);
       if (ret < 0) {
          printf("wrong input!\n");
       } else {
          printf("%s format - %d %d\n", ret == 1 ? "first" : "second", a, b);
       }
   }
}

第一个scanf将要在行的开头读取x。如果找不到,它将转换零数字并返回零。然后,我们可以使用第二种格式进入第二个scanf并进行检查。