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);
...
Вопрос можно закрывать.