instream 的 cin
cin使用的时候出现的问题
cin 等待用户输入的时候会使用空白(空格、制表符、和换行符)来确认字符串的结束位置。
如:输入一个Alan Dreeb,那么遇到空格了,Alan被赋值给第一个变量,Dreeb被赋值给第二个变量。
int main()
{
char name[20];
char favorite[20];
cout << "enter your name:\n";
cin >> name;
cout >> "enter your favorite:\n";
cin >> favorite;
cout << "name: "<< name << endl ;
cout << "favorite: "<< favorite;
}
输出结果:
enter your name :
Alan Yao
enter your favorite :
name : Alan
favorite: Yao
只给你输入一个name,原因,首先Alan Yao,当cin读取到空格,认为已经结束了,所以在Alan后面添加\0。当程序运行到 cin >> favorite,程序读取到Yao,所有把Yao\0赋值给favorite。
使用cin.getline()
cin.getline()是面向行输入的,它使用的是通过回车键输入的换行符来确认结尾。里面有两个参数,第一个是要处理的变量,第二个是要读取的字符数(记住有一个空字符)。其中它是不保存换行符的,还有旧的库对这个函数支持不太友好。
int main()
{
char name[20];
char favorite[20];
cout << "enter your name:\n";
cin.getline(name,20);
cout >> "enter your favorite:\n";
cin.getline(favorite,20);
cout << "name: "<< name << endl ;
cout << "favorite: "<< favorite;
}
输出结果:
enter your name :
Alan Yao
enter your favorite :
sport
name : Alan Yao
favorite: sport
使用cin.get()
为了更加好支持旧版本的c++,还有看出用户输入的是什么,检查错误更加容易一些。使用cin.get()可以更加清晰。它不再读取和丢弃换行符。参数和cin.getline()类似。
`cin.getline(name,20)==cin.get(name,20).get()`