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()还会设置失效位,将关闭后面的输入。