Найти ошибку в коде программы, нарушающая работу функции

Рейтинг: -2Ответов: 1Опубликовано: 25.02.2023

Помогите пожалуйста разобраться с проблемой. Имеется небольшое консольное меню написанное на цикле do while, при нажатии на 1 вызывается функция add_string, которая должна считывать строку от пользователя и заносить в массив. Проблема заключается в том что после вызова этой функции её перекрывает другая функция print_menu.

#include <stdio.h>
#include <stdlib.h>

void add_string(char* userText) {
    printf("Введите строку и нажмите Enter\n");
    fgets(userText, 200, stdin);
    puts(userText);
}


void print_menu()
{
    printf("\t Управление программой\n");
    printf("1 - Для ввода текста\n");
    printf("2 - Для записи введенного текста в файл\n");
    printf("3 - Для выхода из программы\n");
    printf(">");
}

int main()
{
    setlocale(0, "rus");

    char userText[200] = "";
    int controlSybol = 0;

    do
    {
        print_menu();

        scanf("%d", &controlSybol);

        switch (controlSybol)
        {
        case 1:
            add_string(userText);
            break;
        case 2:
            break;
        default:
            break;
        }
        
    } while (controlSybol != 3);

    return 0;
}

Ответы

▲ 1

После чтения

scanf("%d", &controlSybol);

в буфере ввода остается символ перевода строки, который вы и читаете как пустую строку, когда вызываете

fgets(userText, 200, stdin);

Попробуйте дописать пробел, как здесь:

scanf("%d ", &controlSybol);