почему scanf возвращает только номер ввода, который он успешно прочитал? - PullRequest
0 голосов
/ 21 декабря 2018

Я сейчас изучаю программу на C, и у меня есть простая программа для чтения целочисленного ввода, код был показан ниже:

int main() 
{ 
    int x; 
    printf("%d",scanf("%d",&x));  
    /* Suppose that input value given  
        for above scanf is 45 */
    return 1; 
}

Выход был 1.

И когда я попробовал этот код:

int main() 
{ 
    int x, z;
    printf("Enter The Value: ");
    int y = scanf("%d %d",&x, &z);
    printf("The value is %d", y);  
    /* Suppose that input value given  
        for above scanf is 20 789 */
    return 1; 
}

Выход был 2.

Так вот мой вопрос, почему scanf возвращает только number of input вместо value по пользовательскому вводу?Может кто-нибудь объяснить, как это работает?

1 Ответ

0 голосов
/ 21 декабря 2018

scanf() может обрабатывать более одного ввода - во втором примере он считывает два ввода в x и z.И входные данные могут быть разных типов, но возвращаемое значение функции должно быть указано как конкретный тип, в этом случае int.

Поскольку scanf() помещает пользовательские входные данные в указанные переменныев аргументах нет необходимости возвращать его как значение функции.

Возвращая количество входов, можно сказать, насколько успешно это было.Если у вас есть два %d в строке формата, но он возвращает только 1, это означает, что второй вход не выглядел как целое число.Только x будет заполнено, z не будет обновлено.Поэтому вам следует проверить, равно ли возвращаемое значение количеству входных данных, которые вы пытались проанализировать, и сообщить о проблеме, если они не совпадают.

...