fgets() не ждет ввода с клавиатуры

Первый ввод printf("Enter year and press enter: \n"); не ждёт, в связи с чем, добавить туда данные не выходит. Т. е. получается вот так:

Enter year and press enter: //1 ввод (невозможен)
Enter sourse and press enter: 
//2 ввод
Enter familia and press enter: 
//3 ввод и т. д.

Это рабочий код:

#include <sqlite3.h>
#include <stdio.h>

int add(void)
{

    sqlite3 *db;
    
    char *err_msg = 0;

    int rc = sqlite3_open("plants.db", &db);

    if (rc != SQLITE_OK)
    {

        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);

        return 1;
    }

    char sql[1024]; /* make room to hold sql string */

    char year[1024];
    char source[1024];
    char type[1024];
    char familia[1024];
    char taxon[1024];
    char other[1024];

    printf("Enter year and press enter: \n");
        fgets(year, sizeof(year), stdin);
    printf("Enter sourse and press enter: \n");
        fgets(source, sizeof(source), stdin);
    printf("Enter type and press enter: \n");
        fgets(type, sizeof(type), stdin);
    printf("Enter familia and press enter: \n");
        fgets(familia, sizeof(familia), stdin);
    printf("Enter taxon and press enter: \n");
        fgets(taxon, sizeof(taxon), stdin);
    printf("Enter other and press enter: \n");
        fgets(other, sizeof(other), stdin);

    sprintf(sql, "INSERT INTO numbers (year, source, type, familia, taxon, other) VALUES('%s', '%s', '%s', '%s', '%s', '%s');", year, source, type, familia, taxon, other);
        
    rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
    
    if (rc != SQLITE_OK )
    {

        printf("SQL error: %s\n", err_msg);
        
        sqlite3_free(err_msg);
        sqlite3_close(db);
        
        return 1;
    }
    
    sqlite3_close(db);
    
    printf("Number added!\n");
    
    return 0;
    
}

Искал решение в сети, но там речь о конфликте scanf() и fgets(), однако, scanf() я не использую, стало быть, дело в другом.

Вылечил вот так:

// main.c

...

scanf("%d", &option);

scanf("%*c", &option);

...

Вопрос можно закрывать.


Ответы (0 шт):