2014-02-10 3 views
0

Я пытаюсь создать программу, которая получит пользовательский ввод нового имени файла, создаст файл и напишет ему. Он работает, но он будет записывать только первое слово строки в файл. Как я могу заставить его написать полную строку? Благодарю.Запись в файл в C++

#include "stdafx.h" 
#include <fstream> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
for (;;) 
{ 
    char *myFile = " "; 
    string f = " "; 
    string w = " "; 
    cout <<"What is the name of the file you would like to write to? " <<endl; 
    cin >>f; 
    ofstream myStream(f,ios_base::ate|ios_base::out); 

    cout <<"What would you like to write to " <<f <<" ? "; 
    cin >>w; 

    myStream <<w; 

    if (myStream.bad()) 
    { 
    myStream <<"A serious error has occured."; 
    myStream.close(); 
    break; 
    } 
} 

} 

ответ

1

Согласно this post, вы должны проконсультироваться this reference использовать метод как GetLine().

Кроме того, когда вы пишите, я рекомендую вам очистить вывод (cout.flush()) до окончания программы, особенно в этом случае, так как я предполагаю, что вы заканчиваете программу с помощью ctrl-C break.

В формулировке предложения я буду читать данные в char * и преобразовать их в строку, если вы будете использовать их в другом месте в своей программе.

Я тестировал этот код в MS Visual C++ Express.

#include "stdafx.h" 
#include <fstream> 
#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    for (;;) 
    { 
     char *myFile = new char[200]; // modified this line 

     //added this line 
     char *myInput = new char[200]; 

     string f = " "; 
     string w = " "; 
     cout << "What is the name of the file you would like to write to? " << endl; 
     cin.getline(myFile, 200);//modified this line 
     f = (myFile);//added this line 
     cin.clear(); //added this line 
     ofstream myStream(f, ios_base::ate | ios_base::out); 

     cout << "What would you like to write to " << f << " ? "; 

     cin.getline(myInput, 200);//edited this line 

     w = string(myInput);//added this line 

     myStream << w; 
     myStream.flush();//added this line 

     if (myStream.bad()) 
     { 
      myStream << "A serious error has occured."; 
      myStream.close(); 
      break; 
     } 

     delete myFile; 
     delete myInput; 
    } 

} 
0

Вы должны использовать std::getline(), чтобы прочитать всю строку:

std::getline(std::cin >> std::ws, w); 

>> std::ws часть избавляется от ведущих пробелов, который необходим, поскольку символ новой строки остается в потоке из предыдущей экстракции предотвратит std::getline() от полного потребления ввода.

При вставке данных в поток, Вы должны убедиться, что он получает покраснел (потому что, как сказал другой ответ, вы, вероятно, с помощью Ctrl + C, чтобы завершить программу, и вы не можете увидеть результат во время выполнения программы бег). Вы можете использовать std::flush манипулятором промывать выход:

myStream << w << std::flush; 
0

cin<<w; CIN бы прекратить употребление ввода символа, когда он сталкивается с пробельной вкладкой и другие unseeable символов.

вместо этого вы должны использовать вместо этого std::getline(). взгляните на эту страницу для справки. http://en.cppreference.com/w/cpp/string/basic_string/getline

Или вы можете использовать манипулятор, чтобы не пропускать пробелы.