cin.getline()函数是处理数组字符串的,其原型为cin.getline(char * , int),第一个参数为一个char指针,第二个参数为数组字符串长度。
getline(cin,str)函数是处理string类的函数。第二个参数为string类型的变量。
可以看到cin不会丢弃换行符,它会把换行符留在输入队列中,所以getline遇到的换行符,把换行符替换成'\0'所以s是空串
我们用cin.get(c)处理cin丢弃的换行符之后getline就可以正常等待用户输入
下面来看看getline怎么处理输入hello之后的换行符
可以看到第二个getline可以正常输入说明第一个getline丢弃了hello后面的换行符
下面来看看cin.getline
可以看到cin.getline也会读入换行符
并且可以看到cin.getline不会丢弃换行符,会读入上次输入hello后面的换行符并且替换成'\0'
可以看到getline会丢弃hello后面的换行符所以cin.get(c)才会等待用户输入因为输入队列的换行符被丢弃了
但是
这是因为虽然hello的换行符被丢弃了,但是cin.get(c)用户输入的w后面的换行符没有被丢弃,所以需要在cin.get(c)后面加一条
cin.get(a)
这样就可以了
结论:
1、getline读取换行符 并且将换行符替换成'\0',并且会丢弃换行符
2、cin会把换行符留在输入队列中
3、cin.getline读取换行符并替换成'\0',并且不会主动丢弃换行符,会把它留在输入队列中