Мне нужно получить ввод для n
(введенных пользователем) строк. Для этого я начинаю с определения двумерного массива char str[ ][ ].
Я использовал цикл for
, получая ввод от пользователя, и пробовал gets()
, fgets()
оба. В примере кода я использовал gets().
Но он всегда принимает ввод для n-1 строк, то есть на 1 меньше, чем хочет ввести пользователь.
При дальнейшей проверке я обнаружил, что программа не принимает ввод для 0-й строки, т. е. исходной строки.
Мой код:
#include <stdio.h>
int main(void){
int i, n;
printf("how many string you want to enter: ");
scanf("%d", &n);
char str[n][60];
printf("start entering strings:\n ");
for(i=0;i<n;i++){
gets(str[i]); //have used here fgets() also
}
puts(str[0]); //no output for Oth string
return 0;
}
Вывод:
how many string you want to enter:
Пользовательский ввод - 3
how many string you want to enter: 3
start entering strings:
Окончательный результат:
how many string you want to enter: 3
start entering strings:
abc
bcd
Здесь программа завершается после получения ввода только для 2 строк и отсутствия вывода для puts(str[0]);
Хотя входные данные с scanf()
как scanf("%s", str[i]);
работали отлично.
Я хочу знать, почему использование gets()
, fgets()
не сработало.
gets
. Это опасная функция и поэтому даже был удален из стандарта C. - person Some programmer dude   schedule 27.10.2018fgets
. проблема в том, что он не принимает ввод для str[0] - person Vartika   schedule 27.10.2018