2011-03-28 14 views
14

Aquí está mi código C++ actual. Me gustaría saber cómo escribir una línea de código. ¿Todavía usaría cin.getline(y) o algo diferente? Lo he comprobado, pero no puedo encontrar nada. Cuando lo ejecuto, funciona perfectamente, excepto que solo escribe una palabra en lugar de las líneas completas que necesito para la salida. Esto es con lo que necesito ayuda. Lo describí en el código.¿Cómo leer una línea completa del usuario que usa cin?

Gracias por ayudar a

#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

Es posible que desee hacer que su título refleje mejor su pregunta. Además, debes aclarar tu pregunta, no está muy claro lo que estás preguntando. –

+0

K done, Gracias :) – FuzionSki

+2

El problema es que 'cin >> y' solo almacena la primera palabra de la línea que escribe el usuario, el asker quiere saber cómo almacenar toda la línea en y, de modo que' file <

Respuesta

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 es: 'getline (std :: cin, y);' en lugar de 'cin >> y;'. –

+0

La referencia: http://www.cplusplus.com/reference/iostream/istream/getline/ – fretje

+1

también necesita el cin >> ws; de lo contrario, getline solo leerá una nueva línea – hidayat

54

El código cin >> y; sólo lee en una palabra, no toda la línea. Para obtener una línea, utilice:

string response; 
getline(cin, response); 

Entonces response contendrá el contenido de toda la línea.

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

Puede utilizar getline función para leer toda la línea en lugar de leer palabra por palabra. Y el cin >> ws está ahí para omitir los espacios en blanco. Y encontrará algunos detalles al respecto aquí: http://en.cppreference.com/w/cpp/io/manip/ws

+0

Muchas gracias por la sugerencia, he editado la respuesta. –

Cuestiones relacionadas