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

AntOne95

Nuovo Utente
4
0
CPU
Intel Core i7 - 4700HQ 2.40GHz
RAM
16 GB
GPU
Nvidia GeForce 450M
OS
Windows 10 Home Edition 64bit
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.jpg

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

Grazie mille :)
 
Ultima modifica:

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
Sinceramente non ho capito molto di quello che vuoi fare in toto, quindi mi limiterò a rispondere a
Quindi mi rivolto a voi chiedendovi se esiste un moto per acquisire un'intera stringa da tastiera!
Codice:
std::string input;
std::getline(std::cin, input);
 

AntOne95

Nuovo Utente
4
0
CPU
Intel Core i7 - 4700HQ 2.40GHz
RAM
16 GB
GPU
Nvidia GeForce 450M
OS
Windows 10 Home Edition 64bit
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!
 

signore del tempo

Utente Èlite
3,228
491
CPU
Intel Core i5 4670K
Scheda Madre
Asus Z87-Plus
HDD
WD Caviar Green 500GB
RAM
G.Skill Ares 2x4GB 1600MHz
GPU
Sapphire 7850 1GB @ 1050MHz
Audio
Integrata
Monitor
Acer V193w
PSU
XFX ProSeries 550W Core Edition
Case
CM HAF 912 plus
OS
ArchLinux + KDE - Windows 10
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.
 
  • Mi piace
Reazioni: AntOne95

AntOne95

Nuovo Utente
4
0
CPU
Intel Core i7 - 4700HQ 2.40GHz
RAM
16 GB
GPU
Nvidia GeForce 450M
OS
Windows 10 Home Edition 64bit
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:
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!