2011-03-28 8 views
14

Ecco il mio codice C++ corrente. Mi piacerebbe sapere come scrivere una riga di codice. Userei ancora cin.getline(y) o qualcosa di diverso? Ho controllato, ma non riesco a trovare nulla. Quando lo eseguo, funziona perfettamente tranne che digita solo una parola invece delle linee complete di cui ho bisogno per l'output. Questo è ciò di cui ho bisogno di aiuto. L'ho delineato nel codice.Come si legge una riga completa dall'utente usando cin?

Grazie per l'aiuto

#include <iostream> 
#include <cstdlib> 
#include <cstring> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    char x; 

    cout << "Would you like to write to a file?" << endl; 
    cin >> x; 
    if (x == 'y' || x == 'Y') 
    { 
     char y[3000]; 
     cout << "What would you like to write." << endl; 
     cin >> y; 
     ofstream file; 
     file.open("Characters.txt"); 
     file << strlen(y) << " Characters." << endl; 
     file << endl; 
     file << y; // <-- HERE How do i write the full line instead of one word 

     file.close(); 


     cout << "Done. \a" << endl; 
    } 
    else 
    { 
     cout << "K, Bye." << endl; 
    } 
} 
+3

Si potrebbe desiderare che il titolo rifletta meglio la tua domanda. Inoltre, dovresti chiarire la tua domanda, non è molto chiaro cosa stai chiedendo. –

+0

K done, Grazie :) – FuzionSki

+2

Il problema è che 'cin >> y' sta solo memorizzando la prima parola della riga che l'utente digita, il richiedente vuole sapere come memorizzare l'intera riga in y, tale che' file <

risposta

9
#include <iostream> 
#include <cstdlib> 
#include <cstring> 
#include <fstream> 
#include <string> 

int main() 
{ 
    char write_to_file; 
    std::cout << "Would you like to write to a file?" << std::endl; 
    std::cin >> write_to_file; 
    std::cin >> std::ws; 
    if (write_to_file == 'y' || write_to_file == 'Y') 
    { 
     std::string str; 
     std::cout << "What would you like to write." << std::endl; 

     std::getline(std::cin, str); 
     std::ofstream file; 
     file.open("Characters.txt"); 
     file << str.size() << " Characters." << std::endl; 
     file << std::endl; 
     file << str; 

     file.close(); 

     std::cout << "Done. \a" << std::endl; 
    } 
    else 
     std::cout << "K, Bye." << std::endl; 
} 
+3

La parte importante è: 'getline (std :: cin, y);' invece di 'cin >> y;'. –

+0

Il riferimento: http://www.cplusplus.com/reference/iostream/istream/getline/ – fretje

+1

è necessario anche il cin >> ws; altrimenti il ​​getline leggerà solo una nuova riga – hidayat

54

Il codice cin >> y; legge in una sola parola, non tutta la linea. Per ottenere una linea, utilizzare:

string response; 
getline(cin, response); 

Poi response conterrà il contenuto della intera linea.

0
string str; 
getline(cin, str); 
cin >> ws; 

È possibile utilizzare getline funzione per leggere l'intera linea invece di leggere parola per parola. E il cin >> ws è lì per saltare gli spazi bianchi. E qui trovi alcuni dettagli: http://en.cppreference.com/w/cpp/io/manip/ws

+0

Grazie mille per il suggerimento, ho modificato la risposta. –

Problemi correlati