&1 函数cin
cin通过使用空白(空格、制表符和换行符)来定字符串的界。这意味着cin在读取
字符数组输入时只读取一个单词,读取该单词后,cin将该字符串放一数组中,并自动
结尾添加空字符。另外,cin也没有很好的控件输入的字符数,即输入字符数大于数组
大小的情况没有处理。
&2 源代码-cin
const int size = 20;
char name[size];
char pl[size];//program language
cout << "Enter your name:";
cin >> name;
cout << "Enter your favorite program language:";
cin >> pl;
cout << "Hello " << name << ", your favorite program language is " << pl << endl;
&3 cin.getline函数
cin.getline()函数读取整行,它使用通过回车键输入的换行符来确定输入结尾。该函数有
两个参数。第一个参数是用来存储输入行的数组的名称,第二个参数是要读取的字符数(包括
空字符),cin.getline()成员函数在读取指定数目的字符或遇到换行符时停止读取,需要注意
的是,cin.getline()丢弃了换行符。
&4 源代码-cin.getline
cout << "Enter your name:";
cin.getline(name, size);
cout << "Enter your favorite program language:";
cin.getline(pl, size);
cout << "Hello " << name << ", your favorite program language is " << pl << endl;
&5 get函数
get()函数有好几种变体,其中有一种与getline()完全相同的参数,但该函数不再读取并丢
弃换行符(不读取意味着换行符还在输入队列中)
&6 源代码-get()
cout << "Enter your name:";
cin.get(name, size);
cout << "Enter your favorite program language:";
cin.get(pl, size);
cout << "Hello " << name << ", your favorite program language is " << pl << endl;
&7 get()函数的困扰
发现&6中代码并不好使,原因是由于第一次调用后,换行符将留存输入队列中,因此第二次调用时看
到的第一个字符为换行符。因此get认为已经到达行尾,而没有发现任何可读取的内容。get()
(不带任何参数的变体)可以读取下一个字符(包括换行符)。
&8 改进源代码
cout << "Enter your name:";
cin.get(name, size).get();
cout << "Enter your favorite program language:";
cin.get(pl, size).get();
cout << "Hello " << name << ", your favorite program language is " << pl << endl;
&9 混合输入字符串和数字
int age = 0;
char address[size] = { 0 };
cout << "Enter your age:";
cin >> age;
cin.get();
cout << "Enter your address:";
cin.getline(address, size);
cout << "your age is " << age << ", your address is " << address << endl;