一直以来就对C++的字符读入模模糊糊,下午总结了一下,顺便看了若干大神博客,就写了这篇东拼西凑的粗略总结,详细的请看文末的链接。不知道部分借鉴算不算侵权,侵删。
读入任意字符,包括回车在内的空白字符
两者从指定流读取一个字符,该字符可以是回车在内的空白字符。关于两者的区别,貌似是前者是函数,而后者是宏,详见https://www.cnblogs.com/aqxin/archive/2011/05/20/2052069.html
从标准输入中读取一个字符,可以读取空白字符。fgetchar()好像现在已经废除了。
读入非空白字符。
相当于getchar()用于吃掉回车,内部没有参数
通过cin.get(ch)来读取单个字符,可以读取空格,制表符,回车(读取回车时,按一下回车即可)
#include
using namespace std;
int main()
{
char ch;
cin.get(ch);
cout<
不可以读入空白字符,同时,如果一开始为空白字符,无论有多少个空白字符,scanf会自动跳过直到读到非空白字符为止。
可以读入空白字符,不能读入回车符。需要包含"#include"
读入一行指定长度的内容,读入行末回车,可以读入空白字符
#include
#include
using namespace std;
int main()
{
char ch[20];
cout<<"输入:";
fgets(ch, 20, stdin);
cout<<"输出:";
cout<
读入字符串,不可以读入空白字符
可以读入空白字符,注意若第一个参数是指针,则一定要有第二个参数,同时,指定长度包括了’\0’终止符,因此实际长度为指定长度减去1。该函数无法读入回车符。注:不能读入回车符但能读入其他空白字符,意思即为终止符为回车符且不读入。
#include
using namespace std;
int main()
{
char ch[20];
cin.get(ch, 10);
cout<
cin.get()与cin.getline()函数的区别:1,当在终止符之前的字符超过限制长度时,系统会报错(其他博客上有提到,但我家电脑没有报错),不再执行后续的cin。2,两者遇到终止符后的表现不同,cin.get()遇到终止符后会将终止符留在缓冲区,等待下一次读入,而cin.getline()读到终止符后会将终止符抛弃。
其中方括号括起来的部分为可选参数,当只有两个参数时,该函数的功能与cin.get(char*, int)一样,但是当存在第三个参数时就会出现问题,什么问题呢?假设对应语句为cin.getline(s, a, ch),除非读到了char中指定的字符ch,或者读够了len个字符,否则该函数会一直读入。从其他人博客的解释来看,第三个参数为终止符,当没有第三个参数时,终止符为回车符,但是当有第三个参数时,相当于人为规定了终止符,因此结束输入有两个条件,一个是达到限制的字符数,一个是读取到终止符。
#include
using namespace std;
int main()
{
char ch[20];
cin.getline(ch, 10, 'a');
cout<
当只有两个参数时,无法读入回车符,当有三个参数时,可以读入回车符。
#include
#include
using namespace std;
int main()
{
char ch[20];
cout<<"输入:\n";
cin.getline(ch, 10, 'a');
cout<<"输出:\n";
cout<
由输出格式以及字符串长度就可以知道回车符被读入了。
getline与上边的函数区别就是getline第二个参数需要是string类型,这点与上方不同。最后一行为终止符,不读到终止符不会停止读入,这也意味着输入换行符是没有用的。
参考博客:https://blog.csdn.net/u011486738/article/details/82082405
https://blog.csdn.net/life_liver/article/details/8761299
https://blog.csdn.net/a3192048/article/details/80303547(大神博客)
https://blog.csdn.net/livecoldsun/article/details/25489429(大神博客)