PROBLEMA [C++] Problema con scrittura su su file di una stringa

Pubblicità

AntOne95

Nuovo Utente
Messaggi
4
Reazioni
0
Punteggio
22
Sto cercando da ormai qualche ora di creare un programma in C++ che mi renda possibile scrivere su un file da me scelto e poi stampare ciò che vi è scritto.
Il codice, che metterò sotto, funziona quasi completamente, se non ché non riesco a scrivere una string in modo decente sul file, sul file.
Codice:
/* Prova di Scrittura su File */


#include<iostream>
#include<fstream>


using namespace std;


int main()
{
    cout << "\t--- Programma di Scrittura su File ---" << endl << endl;
    char nome[50];
    cout << "Inserire il nome del file che si vuole creare (non puo' contenere spazi ed ha una lunghezza massima di 50 caratteri, estensione compresa): ";
    cin >> nome;    //acquisizione nome del file
    
    fstream f(nome, ios::app);    //se il file non esiste viene creato, se esiste ogni aggiunta sarà posta alla fine del file
    
    cout << "\n\n-- Il file " << nome << " e' stato aperto --" << endl << endl;
    
    string s, b, a;
    cout << "Inserisca la frase da riportare nel file " << nome << " senza andare a capo." << endl;
    
    cin >> s;    //la stringa viene salvata solo fino al primo spazio
    cin >> b;
    getline(cin, b);
    
    f << s << " " << b << "\n";    //copio la stringa sul file
    
    f.close();    //chiudo il file
    f.clear();    //ripulita f in modo da poterla riutilizzare con un altro file, se necessario
    
    cout << "\n\n-- Il file e' stato salvato correttamente --" << endl;
    cout << "-- Stampa del file " << nome << " --" << endl << endl;
    
    f.open(nome, ios::in);
    
    while(f.good()) {
        getline(f, a);
        
        cout << a << endl;
    }
    
    return 0;
}

Il codice è abbastanza rudimentale e semplice (tanto che come nome del file richiedo un char e non una stringa), il problema si pone quando si arriva a
Codice:
cout << "Inserisca la frase da riportare nel file " << nome << " senza andare a capo." << endl;
    
    cin >> s;    //la stringa viene salvata solo fino al primo spazio
    cin >> b;
    getline(cin, b);
    
    f << s << " " << b << "\n";    //copio la stringa sul file
Sapendo che quando uso cin>>s e cin>>b il programma, ovviamente, mi legge solo i caratteri fino al primo spazio e, invece, getline(cin, b) quelli dopo lo spazio, ho pensato di unire i due in modo da avere una stringa normale. Ovviamente ho sbagliato perché con cin>>b il programma mi salva dalla seconda parola presente, e con getline(cin, b), si salva solo ciò che viene dopo la seconda parola, ad esempio:

Frase » Il mio nome è Antonio.
cin >> s restituisce Il
cin >> b restituisce mio
getline(cin, b) restituisce nome è Antonio.

f << s << " " << b << "\n" restituisce sul file la frase Il__nome è Antonio. dove "__" (due underscore) rappresentano due spazi (che l'editor, ovviamente, mi trasforma in un solo spazio), per farvi capire.

programma.webp

Quindi mi rivolto a voi chiedendovi se esiste un moto per acquisire un'intera stringa da tastiera!

Grazie mille :)
 
Ultima modifica:
Quello che voglio fare, in toto, è un programma che legge qualsiasi cosa io scriva (che sia una semplice parola o una vera e propria frase) e me la copi pari pari all'interno del file selezionato.

Comunque, mi spiegheresti come inserirlo all'interno del codice che ho scritto? Non sono un grande programmatore, né uno particolarmente abile, quindi non capisco bene dove inserire il codice... Grazie mille in anticipo!
 
Quello che voglio fare, in toto, è un programma che legge qualsiasi cosa io scriva (che sia una semplice parola o una vera e propria frase) e me la copi pari pari all'interno del file selezionato.

Comunque, mi spiegheresti come inserirlo all'interno del codice che ho scritto? Grazie mille in anticipo!
Il fatto è che, nel tuo codice, utilizzi getline scientemente però poi chiedi come fare una cosa similare ma invariante in termini di codice...
In ogni modo
Codice:
std::string input;
std::getline(std::cin, input); // 1
f << input; // 2

1: Dallo stream di input (gestito da cin) legge l'intera stringa inserita, delimitata dal carattere di invio (newline, '\n') e la inserisce in input.
2: Scrive sul file stream f la stringa input​.

Non sono un grande programmatore, né uno particolarmente abile, quindi non capisco bene dove inserire il codice...
È questione di pratica. Col tempo ti sarà automatico. Se può aiutarti, utilizza versioni informali del poi programma e.g. pseudo-codice e diagramma di flusso tipo
1. Leggi stringa dall'utente in str
2. Sia file un file su cui scrivere
3. Scrivi str su file

per poi concentrarti sui dettagli implementativi.
 
Grazie mille per l'aiuto!
Penso di aver capito come funziona, e spero di riuscire a far i prossimi programmi con più facilità!

Ancora grazie :inchino:
 
Pubblicità
Pubblicità
Indietro
Top