Salve a tutti, è da poco che programmo in c++ e sto riscontrando questo problema:

Ho scritto un codice con una struttura per rappresentare una libreria, quando chiedo all'utente di inserire i libri contenenti all'interno della libreria, il programma salta come se legge due input insieme su una riga.
sicuramente il fatto dipende dal fatto che la stringa è abbastanza lunga, riscontravo lo stesso problema in java risolto con una funzione per leggere una riga intera. ce un modo per ovviare al problema anche sul c? o la mia intuizione è sbagliata e il problema è tutt'altro? vi allego il codice

codice:
#include <iostream>
#include <string>
#include <cstdlib>
#include <istream>
#include <fstream>


using namespace std; 




int main(int argc, char** argv) {
    
struct libro {
  string autore;
  string titolo;
  int data_pubblicazione;
  float prezzo; 
};
    
    struct libro libreria[3]; 
    cout << "Prototipo Uso delle Strutture"; 
    cout << endl;
    
    for(int i = 0; i < 3; i++)
    {
      
      cout << "Inserire l'autore' del libro  " << i ; 
      cin >> libreria[i].autore; 
      
      cout << "Inserire il titolo del libro  " << i ; 
      cin >> libreria[i].titolo; 
      
      cout << "Inserire l'anno di pubblicazione del libro  " << i ; 
      cin >> libreria[i].data_pubblicazione; 
      
      cout << "Inserire il costo del libro  " << i; 
      cin >> libreria[i].prezzo; 
       
      cout << endl; 
      cout << "Id " << i << " aggiunto con successo!"; 
    }
    
    cout << endl; 
    cout << "Resoconto Libri inseriti"; 
    for(int i = 0; i < 3; i++)
    {
      cout << "ID libro: " << i ; 
      cout << endl; 
      cout << "Autore: " << libreria[i].autore; 
      cout << "Titolo: " << libreria[i].titolo; 
      cout << "Data Pubblicazione " << libreria[i].data_pubblicazione; 
      cout << "Prezzo: " << libreria[i].prezzo; 
      cout << endl; 
    }
    system("pause");
    
    
    return 0;
}