cin,getline,cin.getline,scanf,gets等问题

1.cin读入一个数的时候,如cin>>s;我们输入s,之后按回车,是为了将s送入缓冲区,但是cin是不读入换行符的,所以换行符没有读入。所以当:

cin>>s;
getline(cin, str);

输入

2
string

getline是不会读入string的,因为getline能够读入换行符。所以输出的结果好像getline没有读入一样。

2.getline(cin,str,a)是将str读入到cin流中,当a不写时默认遇到换行符停止输入,并将换行符丢弃,如果a写了,如a为‘#’则表示遇到‘#’停止读入。
而while(getline(cin,line))语句注意这里默认回车符停止读入,按Ctrl+Z或键入EOF回车即可退出循环。在这个语句中,首先getline从标准输入设备上读入字符,然后返回给输入流cin,注意了,是cin,所以while判断语句的真实判断对象是cin,也就是判断当前是否存在有效的输入流。 参考博客:https://blog.csdn.net/duan19920101/article/details/50782816

3.cin.getline读取换行符并替换成’\0’,并且不会主动丢弃换行符,会把它留在输入队列中。 参考博客:https://blog.csdn.net/qq_38665104/article/details/82179096

4.scanf:不会读入空格,Tab,换行符,遇到这些会输入结束。
gets:可以读入空格,Tab,换行符。
两者在读取字符串结束后会在末尾加’\0’。
参考博客:https://www.cnblogs.com/wanghetao/archive/2011/11/01/2232234.html

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/120189149
今日推荐