Почему этот код выводит «1» для всех входных данных?

#c #return #printf #return-value #scanf

#c #Возврат #printf #возвращаемое значение #сканирующий #scanf

Вопрос:

 #include <stdio.h>

int main(){
    char testChar;

    printf("%dn", scanf("%c", amp;testChar));

    return 0;
}
  

Все, что я хотел, это напечатать количество отсканированных символов. Но, когда я все мои входные данные имеют одинаковый результат, т.е. 1.

Комментарии:

1. Да, потому что вы отсканировали 1 символ.

2. Может быть, вы хотите прочитать документацию scanf . Вы должны провести хотя бы некоторые незначительные исследования, прежде чем задавать вопрос!

Ответ №1:

scanf() возвращает количество успешно отсканированных элементов. Итак, во всех ваших запусках scanf() все прошло успешно, и, следовательно, ваша программа печатает 1.

От scanf() :

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

Значение EOF возвращается, если конец ввода достигнут до того, как произойдет либо первое успешное преобразование, либо ошибка сопоставления. EOF также возвращается, если возникает ошибка чтения, и в этом случае устанавливается индикатор ошибки для потока (см. ferror(3)), а errno устанавливается для указания ошибки.

Ответ №2:

 scanf()  
   only scans your first character input and returns 1.
  

Ответ №3:

Вы можете попробовать это, чтобы напечатать количество символов, прочитанных из stdin . С использованием scanf в цикле.

 #include <stdio.h>
#include <stdlib.h>

int
main(void) {
    char testChar;
    int numchar = 0;

    printf("Enter characters, CTRL-C to end:n");
    while (scanf("%c", amp;testChar) == 1) {
        numchar  ;
    }

    printf("Number of characters scanned: %dn", numchar);

    return 0;
}