图片来自书籍《C++ primer plus》
常规是使用cin,但cin有缺陷;1.cin 使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着 cin 在获取字符数组如果有空格时那么在输入时只读取一个单词。读取该单词后,cin 将该字符串放到数组中,并自动在结尾添加空字符。
2.输入字符串可能比目标数组长,这样一样会出现问题。
istream 中的类(如 cin)提供了一些面向行的类成员函数:getline( )和 get( )。这两个函数都读取一行输入,直到到达换行符。然而,随后 getline( )将丢弃换行符,而 get( )将换行符保留在输入序列中。
getline( )函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。
要调用这种方法,可以使用 cin.getline( )。该函数有两个参数。第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数。如果这个参数为 20,则函数最多读取 19 个字符,余下的空间用于存储自动在结尾处添加的空字符。getline( )成员函数在读取指定数目的字符或遇到换行符时停止读取。
它通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,它用空字符来替换换行符(参见图 4.5)。
#include
using namespace std;
int main(){
char c1[20];//C语言风格字符串
cout << "请输入一串字符串(注意不要超过19个字符):";
cin.getline(c1, 20);
cout << c1 << endl;
return 0;
}
istream 类有另一个名为 get( )的成员函数,该函数有几种变体。其中一种变
体的工作方式与 getline( )类似,它们接受的参数相同,解释参数的方式也相同,并且都读取到行尾。但 get并不再读取并丢弃换行符,而是将其留在输入队列中。
如果我们连续两次调用get()
cin.get(name1,size1);
cin.get(name2,size2);
出现问题:无法输入第二个字符串
由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符。因此 get( )认为已到达行尾,而没有发现任何可读取的内容。如果不借助于帮助,get( )将不能跨过该换行符。
cin.get(name1,size1).get(); // 拼接方式
cin.get(name2,size2).get();…以此类推
或者
cin.get(name1,size1);
cin.get();
cn.get(name2,size2);
cin.get();
原则就是每次输入完后都要加一个cin.get();cin.get()的作用:读取一个字符
#include
using namespace std;
int main(){
char c1[20];
char c2[20];//C语言风格字符串
cout << "请输入一串字符串(注意不要超过19个字符):";
cin.get(c1, 20).get();
cout << c1 << endl;
cout << "请再输入一串字符串(注意不要超过19个字符):";
cin.get(c2, 20).get();
cout << c2 << endl;
return 0;
}
总之,getline( )使用起来简单一些,但 get( )使得检查错误更简单些。可以用其中的任何一个来读取一行输入;只是应该知道,它们的行为稍有不同。
空行和输入大于分配,getline和get都会退出(或者说关闭)输入,然后执行剩下的语句。
用户根本没有输入地址的机会。问题在于,当 cin 读取年份,和cin.get()一样会将回车键生成的换行符留在了输入队列中。后面的 cin.getline( )(就算用cin.get()也是一样的问题)看到换行符后,将认为是一个空行,并将一个空字符串赋给 address 数组。解决之道是,在读取地址之前先读取并丢弃换行符。这可以通过几种方法来完成,其中包括使用没有参数的 get( )和使用接受一个 char 参数的 get( ),如前面的例子所示。可以单独进行调用:
所以在使用cin>>这种方法输入时(无论是不是混合输入),都建议是像cin.get()那样加一个cin.get();
#include
using namespace std;
int main(){
int num;
char c1[20];//C语言风格字符串
char c2[20];
cout << "请输入一个数字:";
(cin >> num).get();
cout << num << endl;
cout << "请输入一串字符串(注意不要超过19个字符):";
cin.get(c1, 20).get();
cout << c1 << endl;
cout << "请再输入一串字符串(注意不要超过19个字符):";
cin.get(c2, 20).get();
cout << c2 << endl;
return 0;
}
语法:getline(cin,字符串名);
#include
using namespace std;
#include
int main(){
string str;
cout<<"请输入一串字符串:";
getline(cin,str);
cout<
示例:
#include
using namespace std;
#include
int main(){
int num;
char c1[20];//C语言风格字符串
char c2[20];
string str;// C++风格字符串
cout<<"请输入一个数字:";
(cin>>num).get();
cout<