//
// 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");
}
//------------------------------------------------------------------------------
我试图让它输入一个项目,然后继续前进,而不必按Enter键。 IE如果我运行程序并键入S它应该立即调用d.add(ch)而不必按Enter键。我玩过&gt;&gt;所有形式的ch和is.get()以及is.peek()和is.read()。我还移动了is.get(ch)当前到while循环的不同部分的位置。一切都没有运气。现在我很可能没有正确地使用其中一个,一旦一个聪明的人在这里发帖,我就会打我的额头。请帮助我以正确的方式使用我正在使用的东西,或指向我正确的功能方向。
现在它只是让我输入一行文字然后按回车而不是输入所有内容。它已经很晚了我累了,并试图学习新的东西,所以除了非常感谢你的时间和精力。我也想说抱歉= p。
P.S。 请不要注意标题。一个是Stroustrup的标题,基本上包含了用于学习目的的所有常见内容。