换行符是否保存在stdin中?

时间:2016-07-16 09:29:32

标签: c++ c++11

据我所知,当我编写alert(user) 命令时,程序会等待用户输入一些字符,直到遇到换行符cin >> a。这些字符将被放入\n。在此之后,stdin将获得第一个字符并将其放入cin变量。

我编写了这个程序,将2个字符放入stdin,并使用2个cin命令让它们显示:

a

案例1:我输入字符串" KH"然后按Enter键。它显示了K和H.

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    char input;
    char input_next;
    cout << "Please enter a character from your keyboard: ";
    cin >> input;
    cout << input << endl;
    cin >> input_next;
    cout << input_next << endl;
    return 0;
}

案例2:我输入角色&#34; K&#34;然后按Enter键。它显示K并等待我输入更多字符。它不显示换行符(输入按钮)。为什么?

2 个答案:

答案 0 :(得分:1)

&#34;&gt;&gt;&#34;读取字符或字符串时,运算符会跳过所有空白区域。所以,当你只输入一个字母时,程序就会等到你给它读一些东西。

如果你想让它读取换行字符,eof,空格,你可以使用cin.get()函数,它将获得缓冲区中的下一个字符,无论它是什么。

答案 1 :(得分:0)

  

据我所知,当我写cin&gt;&gt;一个命令,程序将等待用户输入一些字符,直到遇到换行符\ n。这些角色将被放入stdin。

稍微复杂一些。 C ++程序仅与标准输入流交互。字符如何结束,以及用户如何将它们提供给程序取决于操作系统(或可能是运行时库)。大多数操作系统执行行缓冲,它具有您描述的行为,但从程序的角度来看,它是连续的字符流。

  

之后,cin将获得第一个字符并将其放入变量中。

这取决于a的类型,但我认为您的意思是它具有char类型。在这种情况下,它执行格式化输入:它会丢弃所有空格字符(空格,制表符,换行符,垂直制表符......),直到它遇到非空格或点击流末尾。您没有看到打印换行符,因为运算符&gt;&gt; 跳过它并等待非空格字符出现在流中。