Компилятор: 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
Если я ввожу целые числа, он отлично работает.
scanf()
читает новые строки. Если вы ввели 'a'
, 'b'
и 'c'
и набрали Enter после каждого из них, тогда a
будет содержать {'a', '\n', 'b', '\n', 'c'}
, и окончательный '\n'
не будет читаться.
Это связано с тем, что символ newline (\n
в Unix/Linux) оставлен позади scanf()
для следующего вызова scanf()
(в этом случае). Измените scanf("%c",&a[i]);
в
scanf(" %c",&a[i]);
↑
space before specifier
При помещении пробела до %c
, scanf()
пропускает на вход любое количество символов пробела.
\n
потребляется scanf()
, поэтому остальные 2 символа не принимаются.
Добавьте начальное пространство до %c
Изменить на:
scanf(" %c", &a[i]);
<kbd>
!