scanf может читать только 3 символа в 5-позиционном массиве символов

0

Компилятор: 32-битный Gcc Linux

#include<stdio.h>

int main()
{
    int i;
    char a[5];

    for(i=0;i<5;i++)
        scanf("%c",&a[i]);

    for(i=0;i<5;i++)
        printf("%c",a[i]);
} 

Почему этот массив принимает только три символа, даже если я указал его взять 5 символов? a Если я ввожу целые числа, он отлично работает.

Теги:

3 ответа

4

scanf() читает новые строки. Если вы ввели 'a', 'b' и 'c' и набрали Enter после каждого из них, тогда a будет содержать {'a', '\n', 'b', '\n', 'c'}, и окончательный '\n' не будет читаться.

  • 2
    @haccks: Спасибо, что рассказали мне о <kbd> !
  • 0
    Это потрясающе!
Показать ещё 1 комментарий
3

Это связано с тем, что символ newline (\n в Unix/Linux) оставлен позади scanf() для следующего вызова scanf() (в этом случае). Измените scanf("%c",&a[i]); в

scanf(" %c",&a[i]);  
       ↑
   space before specifier  

При помещении пробела до %c, scanf() пропускает на вход любое количество символов пробела.

  • 0
    Почему это не при вводе целых чисел таким же образом?
  • 1
    Потому что перевод строки не является целым числом, это символ.
Показать ещё 11 комментариев
0

\n потребляется scanf(), поэтому остальные 2 символа не принимаются.

Добавьте начальное пространство до %c

Изменить на:

scanf(" %c", &a[i]);
  • 0
    «Обратите внимание, что Enter эквивалентно \ n в C» - ну, в любом случае, на 5% компьютеров в мире. А остальные, 95%, работают под управлением Windows.
  • 0
    LOL Я также запускаю Windows, и мне это нравится: P
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню