Как проверить, что получил Сканф? - PullRequest
0 голосов
/ 19 ноября 2018

Программа должна допускать два разных шаблона и рассчитывать разные вещи в зависимости от того, что было получено от пользователя.Допустим, что шаблоны:

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 голосов
/ 19 ноября 2018

Просто укажите формат в 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 со вторым форматом и проверить его.

...