首先定义4个字符类型的数组
const int max=20;
char firstname[max],
lastname[max],
grade[max],
age[max];
录入信息后得到这样的结果:
What is your first name? William Sherlock
What is your last name?Homes
What is your grade?3
What is your age?20
Name : William Sherlock Homes
Grade:3
Age:20
当需要从键盘输入一个带空格的字符串时,例如 William Sherlock,不能简单地用cin将 William Sherlock输入到数组firstname中,那么就需要iostream中的getline()和get()
cout << "What is your first name?";
cin.getline(firstname, max);
cout << "What is your last name ?";
cin.getline(lastname, max);
cout << "What is your grade?";
cin.getline(grade, max);
cout << "What is your age?";
cin.getline(age, max);
cout << "Name:";
cout << firstname <<" "<< lastname;
cout << "Grade:";
cout << grade << endl;
cout << "Age:";
cout << age;
输入信息,结果就是想要的
但是,当输入firstname时改为
cin.getline(firstname,10);
结果就会变为
What is your first name?William Sherlock
What is your last name ?What is your grade?What is your age?Name:William S Grade:
Age:请按任意键继续. . .
也就是说,我们根本没有输入后面的机会。
(这里Name只get到9个字符的原因是getline(firstname,10)中第二个参数为10,而提取时只提取9个字符,最后用空字符\0来填补最后一个字符,如果是回车的话,则会替代换行符)
把第一个getline改为get
What is your first name?William Sherlock
What is your last name ?What is your grade?3
What is your age?20
Name:William S herlockGrade:3
Age:20请按任意键继续. . .
Name中虽然多了一个空格(firstname只读9个字符然后加\0),但是所有字符都get到了
这是因为当输入包含的字符比指定的多,getline()和get()函数会把余下的字符留在队列中,下一次依然读取到换行符结束(get()函数不舍弃换行符),而getline()函数还会设置失效位,并关闭后面的输入