c++ 输入

· cin:

  使用空白(空格,制表符和换行符)来定字符串的界,这意味着cin在获取字符数组输入时只读取一个单词,读取该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。

面向行输入:

· getline()

  读取整行,通过回车键输入的换行符来确定输入结尾;调用:cin.getline(name,20) 表示将一行的前19个字符(最后一个为字符串结束符)读入name数组中

· get()

  get()有一种变体的工作方式和getline很类似,它们接受的参数相同,解析参数的方式也相同,并且都能读到行尾,但get并不再读取并丢弃换行符,而是将其留在输入队列中。

  假设我们连续调用两次get:

cin.get(name, ArSize);
cin.get(dessert,ArSize);

  由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符。因此get()会认为已经达到结尾,而没有发现任何可读的内容。如果不借助于帮助,get()将不能挎过该换行符。幸运的是,get还有另外一种变体。使用不带任何参数的cin.get()调用可读取下一个字符(即使是换行符)因此可以使用它来处理换行符。

cin.get(name, ArSize); // read first line
cin.get();                     // read newline
cin.get(dessert,ArSize);// read second line
//另外一种使用get的方式是将两个类成员函数拼接起来,如下:
cin.get(name, ArSize).get();// concatenate member functions

· 输入空行和其他问题

  当get()(不是getline())读取空行后将设置失效为(failbit)。这意味着接下来的输入将被阻断,但可以用下面的命令来恢复输入:

cin.clear();

  另一个潜在的问题是,输入字符串可能比分配的空间长。如果输入行包含的字符数比制定的多,则getline()和get()将把余下的字符留在输入队列中,而getline()还会设置失效位,将关闭后面的输入。

 

 

posted on 2015-12-17 22:45  czh_eric  阅读(180)  评论(0编辑  收藏  举报

导航