为什么std :: cin字符串输入问我每个空格

时间:2012-05-22 18:53:39

标签: c++

本周我开始用C ++学习文本文件,在我的练习中,我必须做一个程序,用户输入文件中的行,但是......对于用户输入的每个空间,程序要求新的给用户。

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(void){
    ofstream myfile;
    string answer;

    do{
        cout << "Insert a line in the file[END to finalize]: ";
        cin >> answer;
        myfile.open("example.txt");
        myfile << answer;
        myfile.close();
    }while(answer != "END");
}

结果是:

  

在文件中插入一行[END to finalize]: Hello my friend

     

在文件中插入一行[END to finalize]:在。中插入一行   file [END to finalize]:在文件中插入一行[END to finalize]:

2 个答案:

答案 0 :(得分:4)

operator>>(istream&, string&)基本上抓住了下一个词。如果您想抓一整行,请尝试std::getline(std::cin, answer);

但是,

getline不会包含换行符。这意味着您必须执行myfile << answer << '\n';之类的操作才能将它们输出为行。

顺便说一下,在大多数情况下,你想要在循环外打开文件,或打开它以附加myfile.open("example.txt", ios::app);之类的东西。每次像你一样在循环中打开文件,我很确定你将文件指针放在文件的开头,所以你写的每一行都会至少覆盖前一行的第一部分。

答案 1 :(得分:0)

cin >> answer将读取一个由空格分隔的单词。 如果您想阅读整行,请使用getline(cin, answer)