Изменение:
scanf("%s", &array[i]);
к этому:
scanf(" %c", &array[i]);
, поскольку вы пытаетесь прочитать строку за символом.
Обратите внимание на пробел перед %c
, который будет использовать завершающий символ новой строки, который будет оставлен в буфере стандартного ввода после того, как вы ввели n
.
Я написал об осторожности при чтении символа с scanf()
здесь .
Теперь, даже если вы используете {(()
или { ( ( )
для ввода, оно будет таким же, так как scanf()
будет игнорировать пробелы.
Однако, вы должны null завершить вашу строку, если вы хотите, чтобы она использовалась стандартными функциями, которые вы почти наверняка захотите. Например, если вы должны использовать printf("%s", array);
, то вы должны иметь array
null прекращено.
Подход к этому, предполагая, что пользователь будет вводить правильно (в идеальном мире), вы могли бы сделать это:
#include <stdio.h>
int main()
{
long int n;
int i;
scanf("%ld", &n);
// create an extra cell to store the null terminating character
char array[n + 1];
// read the 'n' characters of the user
for(i=0; i<n ; i++)
{
scanf(" %c", &array[i]);
}
// null terminate the string
array[n] = '\0';
// now all standard functions can be used by your string
printf("%s\n", array);
return 0;
}
PS: scanf("%lld", &n);
-> scanf("%ld", &n);
. Используйте предупреждения вашего компилятора! Он расскажет вам об этом ..