Почему у меня не получается нормальный ввод, когда я добавил cin >> ... (вместе с gets_s)

Можно еще вас спросить?)
Почему у меня не получается нормальный ввод, когда я добавил cout << " Vvedi god "; и cin >> p[i].god; у меня все пошло по одному месту

#include <string.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{  
    struct library
    {
        char author[30];
        char book[30];
        int god;
    } p[5];

    int i, j;
    char author[30];
    int n = sizeof(p) / sizeof(library);

    for (i = 0; i < n; ++i)
    {
        cout << " Vvedi avtora ";
        gets_s(p[i].author);
        cout << " Vvedi knigu ";
        gets_s(p[i].book);
        cout << " Vvedi god ";
        cin >> p[i].god;
    }

    cout << " Vvedi imya avtora ";
    gets_s(author);

    for (i = 0, j = 0; i < n; ++i)
    {
        if (strcmp(p[i].author, author) != 0)
        {
            p[j] = p[i];
            ++j;
        }
    }
    n = j;

    for (i = 0; i < n; ++i)
        cout << p[i].author << " \t" << p[i].book << "\t"<< p[i].god<<"\n";
    system("pause");
}

cin оставляет перевод строки в буфере ввода и gets его читает и завершается.

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    char cstr[255];
    string str;

    cin >> str;
    gets_s(cstr);

    cout << "cin: '" << str << "'\n";
    cout << "gets: '" << cstr << "'\n";

    return 0;
}

Можно что-нибудь типа cin.ignore воткнуть.

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    char cstr[255];
    string str;

    cin >> str;
    cin.ignore();
    gets_s(cstr);

    cout << "cin: '" << str << "'\n";
    cout << "gets: '" << cstr << "'\n";

    return 0;
}

cin + cin.ignore + gets_s


ЗЫ раз остальные имена на английском, то и год надо писать как year, а не god (бог). :dadparrot:

1 лайк

Спасибо огромное, вы мой спаситель) :awyeah_dancing: