标签:
cin是C++中常用的一种输入方式,通常与>>运算符结合使用,解释为从输入流中抽取出字符存入到想要保存的变量中。
eg:
#include <iostream> using namespace std; int main() { char name[20]; cout << "Enter your name: " << endl; cin >> name; cout << "your name is: " << name <<endl; return 0; }
示例演示了cin的用法,cin >> name表示用户输入的字符串先存到输入流中,后又取出存入name数组中。>>运算符表示了一种流的流动方向。
此处我们输入的是单个单词,用换行符结尾。
接着看下面的示例:
#include <iostream> using namespace std; int main() { char name[20]; char food[20]; cout << "Enter your name: " << endl; cin >> name; cout << "Enter your favorite food: " << endl; cin >> food; cout << "your name is: " << name <<endl; cout << "your favorite is: " << food << endl; return 0; }
假设我们name输入的是Tom Jerry,运行代码代码会发现我们并没有输入food的机会,代码就运行完成了。输出结果如下:
这是为什么呢?要弄清楚这个问题,我们需要知道cin作为接受输入的途径,它是以什么作为标示来表示已完成字符串输入的。
当我们使用cin来接受输入时,要记住它是以空白来确定字符串的结束位置的,这里的空白指空格、制表符和换行符。知道这一点,我们就清楚了。在第一个示例中,我们的输入是以换行符结束的。在这个示例中,我们输入字符时,带了两个可以标示结尾的字符,一个是空格,另一个是换行符。
这个例子的实际过程是:Tom作为第一个字符串存储在name数组中,遇到空格,这时第一个cin操作完成;Jerry被留在输入队列中,遇到cin >> food;语句,发现输入队列中有Jerry,因此读取Jerry,并存入food数组;遇到换行符,此时cin操作结束。这样输出结果就是我们所看到的那样。
到了这里,我们会发现以cin作为输入,有时候并不能满足我们的需要,例如读取整行。。
下面介绍2中每次可以读取一行的输入方式。
1、getline();
getline()行数读取整行,并以换行符来标示结尾,并且会丢弃这个换行符。要调用该方法,需采用cin.getline()形式。
getline()方法接受两个参数,getline(arrName, length);
第一个参数表示存储读入行的数组,第二个表示要读取的字符串长度。注意这个长度是已经包括空字符‘\0‘的长度,实际可读入长度是(length - 1)。
eg:
#include <iostream> using namespace std; int main() { char name[20]; char food[20]; cout << "Enter your name: " << endl; cin.getline(name,20); cout << "Enter your favorite food: " << endl; cin.getline(food,20); cout << "your name is: " << name <<endl; cout << "your favorite is: " << food << endl; return 0; }
运行结果如下:
getline()还有一种接受3个参数的形式,getline(arrName, length, char ch);第三个参数表示的是自己定义的结尾符。
#include <iostream> using namespace std; int main() { char name[20]; char food[20]; cout << "Enter your name: " << endl; cin.getline(name,20); cout << "Enter your favorite food: " << endl; cin.getline(food,20,‘l‘); cout << "your name is: " << name <<endl; cout << "your favorite is: " << food << endl; return 0; }
结果:
2、get()
get()成员函数有多种变体,下面介绍get(arrName, length);参数的含义和结尾符跟getline()相同,不同的地方是get()方法不会丢弃行尾的换行符,而是会将他继续留在输入队列中。
eg:
#include <iostream> using namespace std; int main() { char name[20]; char food[20]; cout << "Enter your name: " << endl; cin.get(name,20); cout << "Enter your favorite food: " << endl; cin.get(food,20); cout << "your name is: " << name <<endl; cout << "your favorite is: " << food << endl; return 0; }
结果:
由于换行符会被保存到输入队列中,cin.get(food,20)这段代码读到的就是换行符,而换行符预示着输入走到了结尾,所以这句代码不会读到任何字符串,程序就结束了。
要避免这种情况可以在代码中加入一句cin.get();
cin.get(name,20); cout << "Enter your favorite food: " << endl; cin.get();//read newline; cin.get(food,20);
结果:
cin.get()读取单个字符,它可以处理换行符。
不同的调用方式
上述两个函数都有一种拼接的调用方式。由于通过cin调用get()方法会返回一个cin对象,所以可以有这样的调用方式:cin.get(arrName,length).get()。同理,getline()也是类似的。这里不在过多叙述
2015-06-06 10:25:41
标签:
原文地址:http://www.cnblogs.com/xzmblog/p/4556189.html