需要关于cin.get和cin.putback的帮助

问题描述:

我对编程非常陌生,正在研究这段代码,试图理解它是如何工作的。我的理解是,while循环的每次运行的开始都是程序等待输入,如果允许该输入,则循环运行。那是对的吗?如果是的话,如果程序打印出'$',程序如何显示'!'键入,看在这种情况下如何在其他情况下的cout命令没有被激活?需要关于cin.get和cin.putback的帮助

int main() { 
char ch; 
cout << "enter a phrase: "; 
while (cin.get(ch)) { 
    if (ch == '!') cin.putback('$'); 
    else cout << ch; 
    while (cin.peek() == `#') cin.ignore(1,'#'); 
    } 
return 0; 
} 

输出:输入一个词组:Now!is#the!time#for!fun#! 现在$ isthe $可能性会$ $乐趣

+0

我不是C++专家,但我猜'cin.putback'替换'cin'流中最后一个输入的字符。它确实与'cout'无关。 – Kilazur

请参阅documentationputback方法:

istream的&补篮(字符C);

认沽字符回

试图通过一个字符减少 流中的当前位置,使得从 流再次提供给由输入操作提取提取的最后一个字符。

如果程序读取'!'字符,它把回流的'$'字符,这是在一个循环迭代读取和打印。

+0

所以,如果我正确理解你,那么cin.putback('$')会说,下一次我的程序中的一个字符应该被读入,那个字符将是'$'? –

+0

@ElDuderino是的。但请注意(来自同一文档):'putback'行为取决于与流关联的特定流缓冲区对象。不同类型的缓冲区可能会失败,被忽略或覆盖该位置的字符。 – Mikhail