@avion123678

Функция gets() в C?

Здравствуйте, почему при выполнении программы не выполняется 3 gets? Первые два работают нормально, но когда доходит до 3, он не выполняется и длина выводится 0?
При этом, если закомментировать первую часть программы до char message[255], gets() выполняется и все работает как нужно.
Код:
int main() {

    char arr1[255];
    char arr2[255];

    gets(arr1);
    gets(arr2);

    int n;

    scanf("%d", &n);

    printf("%s\n", strncat(arr1, arr2, n));

    char message[255];

    gets(message);

    printf("%lu\n", strlen(message));
    
    return 0;
}
  • Вопрос задан
  • 263 просмотра
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Первые два работают нормально, но когда доходит до 3, он не выполняется и длина выводится 0?

Потому что scanf("%d", &n); зачитывает только один int из стандартного ввода. Если ты вводишь число и жмёшь enter, то конец строки остаётся в потоке ввода и читается gets'ом.
Поэтому нужно либо вводить строку предназначенную для gets следом за числом предназначенным для scanf, либо scanf сделать таким: scanf("%d ", &n);
Ответ написан
Комментировать
@Wundarshular
Как отметил jcmvbkbc, у вас "застревает" код клавиши enter в потоке ввода - это распространённый нюанс работы с потоком на начальных этапах.
Как вариант, вы можете "вычищать" поток следующей конструкцией:
while (getchar() != '\n');
будет происходить считывание ввода посимвольно, отправляя результат "в никуда", пока не будет считан символ '\n' - после цикл завершится, и поток ввода уже не будет содержать данный символ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы