c++;istream重载程序输入数据不正确 // //这是本手册第20.6.1章“行”中的示例代码 //“编程——使用C++的原则和实践”,Bjarne Stroustrup // #包括 #包括 const char NEW_LINE='\n'; //------------------------------------------------------------------------------ typedef矢量线;//行是字符的向量 //------------------------------------------------------------------------------ 类文档{ 公众: Document();//{line.push_back(line());} bool-add(char-ch); 作废打印(); 私人: list _line;//文档是行的列表 }; 文档::文档() :_行({line()}) {} bool文档::添加(char-ch) { 嘟嘟声(0x25,1); if(ch==新的_行){ _线。向后放置(线()); } _line.back().emplace_back(ch); 返回true; } 作废文档::打印() { 如果(_line.size()){ cout begin();char_it!=line_it->end();++char_it){ cout(istream&is、文件和开发) { char ch=0; while(is.get(ch)){ 如果(ch=='['){ 打破 } d、 添加(ch); cout>d; d、 打印(); 系统(“暂停”); } //------------------------------------------------------------------------------

c++;istream重载程序输入数据不正确 // //这是本手册第20.6.1章“行”中的示例代码 //“编程——使用C++的原则和实践”,Bjarne Stroustrup // #包括 #包括 const char NEW_LINE='\n'; //------------------------------------------------------------------------------ typedef矢量线;//行是字符的向量 //------------------------------------------------------------------------------ 类文档{ 公众: Document();//{line.push_back(line());} bool-add(char-ch); 作废打印(); 私人: list _line;//文档是行的列表 }; 文档::文档() :_行({line()}) {} bool文档::添加(char-ch) { 嘟嘟声(0x25,1); if(ch==新的_行){ _线。向后放置(线()); } _line.back().emplace_back(ch); 返回true; } 作废文档::打印() { 如果(_line.size()){ cout begin();char_it!=line_it->end();++char_it){ cout(istream&is、文件和开发) { char ch=0; while(is.get(ch)){ 如果(ch=='['){ 打破 } d、 添加(ch); cout>d; d、 打印(); 系统(“暂停”); } //------------------------------------------------------------------------------,c++,iostream,C++,Iostream,我试图让它输入一个项目,然后在不必按enter键的情况下继续。例如,如果我运行程序并键入S,它应该在不必按enter键的情况下立即调用d.add(ch)。我使用了所有形式的is>>ch和is.get(),以及is.peek()和is.read()。我还移动了is.get(ch)的位置当前是while循环的不同部分。都没有运气。现在很可能我没有正确使用其中一个,一旦有一个聪明人在这里发帖,我就要拍我的额头了。请帮助我以正确的方式使用我正在使用的内容,或者为我指出要调用的正确函数的方向 现在只是让我

我试图让它输入一个项目,然后在不必按enter键的情况下继续。例如,如果我运行程序并键入S,它应该在不必按enter键的情况下立即调用d.add(ch)。我使用了所有形式的is>>ch和is.get(),以及is.peek()和is.read()。我还移动了is.get(ch)的位置当前是while循环的不同部分。都没有运气。现在很可能我没有正确使用其中一个,一旦有一个聪明人在这里发帖,我就要拍我的额头了。请帮助我以正确的方式使用我正在使用的内容,或者为我指出要调用的正确函数的方向

现在只是让我输入一行文本,然后按enter键,然后输入所有内容。现在已经很晚了,我很累,正在尝试学习新的东西,所以除了说声谢谢你的时间和努力之外,我还想说声对不起

p、 美国。
请不要注意标题。其中一个是Stroustrup的标题,基本上包含了所有用于学习目的的常见内容。

这都是无用的,
std::cin
流在缓冲区中看不到任何显示,直到用户点击
ENTER
键。是否有其他形式的输入可以满足我的需要然后,谢谢你看我的代码。@ WooZravig你是说键盘中断是唯一的方法吗?再次感谢你看代码。在标准C++中没有办法做到这一点。你需要使用平台特定的东西。在Windows上,查找<代码>
//
// This is example code from Chapter 20.6.1 "Lines" of
// "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup
//

#include <std_lib_facilities.h>
#include <Windows.h>

const char NEW_LINE = '\n';

//------------------------------------------------------------------------------

typedef vector<char> Line;    // a line is a vector of characters

//------------------------------------------------------------------------------

class Document {
public:
    Document();// { line.push_back(Line()); }
    bool add(char ch);
    void print();
private:
    list<Line> _line;    // a document is a list of lines 
};

Document::Document()
: _line({ Line() })
{}

bool Document::add(char ch)
{
    Beep(0x25, 1);
    if (ch == NEW_LINE) {
        _line.emplace_back(Line());
    }
    _line.back().emplace_back(ch);

    return true;
}

void Document::print()
{
    if (_line.size()) {
        cout << endl;
        for (auto line_it = _line.begin(); line_it != _line.end(); ++line_it) {
            for (auto char_it = line_it->begin(); char_it != line_it->end(); ++char_it) {
                cout << *char_it;
            } // end char_it for loop
            cout << endl;
        } // end _line_it for loop
    } // end if block _line.size()
}
//------------------------------------------------------------------------------

istream& operator>>(istream& is, Document& d)
{
    char ch = 0;
    while (is.get(ch)) {
        if (ch == '[') {
            break;
        }
        d.add(ch);
        cout << "\nHERE";
    }
    return is;
}

//------------------------------------------------------------------------------

int main()
{
    Document d;
    cin >>  d;

    d.print();

    system("PAUSE");
}

//------------------------------------------------------------------------------