1、前言
主要就cin和getline进行讲解
参考:
1. C++输入输出(cin和cout)
2. C++ getline函数用法详解
2、cin
cin读取数据是从第一个非空白字符开始到下一个空白字符结束,或者文件结束符(end-of-file,EOF)。什么是空白字符,它包括了(Space、Tab、Enter),也即是每次的cin都是一次读取,每次遇到(Space、Tab、Enter)或者EOF就结束。
举几个例子:
- 空格
//用户输入:big egg
cin>>a>>b //则a=big,b=egg
- Tab
//用户输入:big egg
cin>>a>>b //则a=big,b=egg
- Enter
//用户输入:
//big
//egg
cin>>a>>b //则a=big,b=egg
一个易错点:
cin是从第一个非空白字符开始的,也就是如果你想输入两行字符串,但是第一行可能为空,那么你的操作就是第一次输入:直接回车;第二次输入:输入字符串后回车。如果使用一下代码来接受,则会出错:
string a,b;
cin>>a>>b;
我们知道第一行是空白字符串,根据cin的读取规则是不会读取的,cin>>a会继续等待用户输入,当用户输入第二行时,其字符串内容会被cin>>a读取。此时用户两行都输入完毕了,但是cin>>b没有被使用,但程序会一直卡在cin>>b等待输入,造成了问题。即你想要的是:
a=“”
b=“your input context”
而根据代码接受的是:
a=“your input context”
b= //在这里一直等待你的输入
如何解决?使用getline()
3、getline()
函数可读取整行,包括Space、Tab、Enter,并将其存储在字符串对象中,使用方法为:
string a,b;
getline(cin, a);
getline(cin, b);
用户输入后的结果:
a=“”
b=“your input context”