проверка типа ввода с использованием возвращенного значения scanf не удалась - PullRequest
1 голос
/ 17 апреля 2019

Я хочу проверить, все ли входы имеют тип double в этом коде в c, используя возвращаемое значение scanf:


#include <stdio.h>

int main()
{
    double a,b,c;
    int x = scanf("%lf %lf %lf", &a, &b, &c);
    printf("%d", x);
}

, но вот что я получаю:

  • здесь я ожидаю 1, но я получаю 0:enter image description here
  • здесь я ожидаю 2, но я получаю 1: enter image description here

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

scanf останавливает обработку ввода, как только происходит сбой любого преобразования, переходя слева направо, он не пытается обработать оставшиеся входные данные.

Поэтому, когда вы вводите

b b 2.8

, происходит сбой при попытке выполнить первое %lf преобразование.Поскольку никакие преобразования не были выполнены, он возвращает 0.

. Когда вы вводите

2 x 2.1

, он успешно преобразует 2 в double, но не работает на x,поэтому он не обрабатывает 2.1 и возвращает 1.

2 голосов
/ 17 апреля 2019

Согласно scanf man

Строка формата состоит из последовательности директив, которые описывают, как обрабатывать последовательность вводимых символов.Если обработка директивы не удалась, дальнейшие входные данные не читаются, и scanf () возвращает


Таким образом

Для случая 1.

scanfпрекратит чтение, когда обнаружит несоответствие для первого спецификатора.

для случая 2.

scanf прекратит чтение, когда обнаружит несоответствие для второго спецификатора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...