записать строку в файл с пробелами

0

У меня проблема с записью в файл. Если я пишу что-то с пробелами, он записывает каждое слово как одну строку. Зачем?

void backstart()
{
    thread t1(backing);
    thread t2(thr2);
    t1.join();
    t2.join();
}

void thr2()
{
    string tmp;
    tmp = "";
    while (tmp != "/exit") 
    {
        cin >> tmp;
        if (tmp != "/exit")
        {
            writefile(tmp);
        }
    }
    runing = false;
}

void writefile(string msg)
{
    ofstream myfile("file.txt", ios::out | ios::app);
    myfile << userna + ": " + msg + ",\n";
    myfile.close();
}

Благодаря Damon

Теги:
input
line
fstream
space

1 ответ

0
Лучший ответ

Подумайте о том, как писать:

void thr2()
{
    std::string line;
    while(std::getline(cin, line)) // this check the read succeeded as well
    {
        if (line=="/exit") break; // stop on "/exit" command
        writefile(line); // write out the line
    }
    running = false; // stop the thread, I guess
}

Важнейшей линией является

while(std::getline(std::cin, line))

который считывает всю строку в то время в std::string называется line, а затем проверяет состояние потока, чтобы убедиться, что чтение удалось. Читайте о std::getline здесь.

Редактировать:

Будьте очень осторожны (и на самом деле я предлагаю просто избегать этого), смешивая чтение с помощью >> и getline. Если вы читаете, например, int, с помощью >> он оставит символ '\n' в конце строки, поэтому, когда вы читаете следующий getline с помощью getline, вы получите остальную часть строки (в основном это ничего), а не то, что вы, вероятно, хотели, это следующая строка.

Если вы только что прочитали с помощью >> и хотите использовать getline, сначала прочитайте веб-прошивку, как этот std::cin >> std::ws.

  • 0
    Пожалуйста, убедитесь, что вы читаете мои изменения в конце, а также.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню