赞
踩
字符串或字符的输入有好多个函数,scanf、getline()、cin.getline()、cin.get()、gets()、getchar()等
cin和cin.get都会将结束符或换行符留在缓冲区,而除cin外的函数都不能忽略缓冲区的结束符,所以如果用了cin,再用他们的时候记得加上getchar
scanf用于字符串数组,遇到空格或换行就停止
char str[10];
scanf("%s", str);
cout<<str<<endl;
可以接受空格,读取时遇到换行符结束
有两种读取方法,法一是string流,法二是iostream流,是两个不一样的函数
使用string
string str;
getline(cin, str);
cout<<str<<endl;
使用字符串数组
char str[100];
cin.getline(str, 20, '\n')
//cin.getline()里面三个参数,第一个是要储存的字符串数组,第二个是最大长度 + 1,最后一个位置用来存储'\0',也就是说你填20,但是只能存前19个字符,第三个是结束符,可省略,默认是换行符
程序的输入都建有一个缓冲区,每次输入的过程,其实是计算机先将输入的数据存在输入缓冲区中,而我们使用的输入函数是直接从缓冲区中读取数据。使用cin的时候,遇到空格和换行符和tab键就会停止,此时缓冲区就会有残留数据:空格、换行符、tab。cin和cin.get()从缓冲区读入的时候会自动忽略第一个空格、换行符、tab,就可以正常读入字符串,但有些函数并不能,比如 getline,gets,get, 他们就会直接读取缓冲区剩余的空格、换行符、tab,就导致需要输入的输不进去。
所以如果你使用getline()或gets()或者cin.get()之前用了cin或cin.get(),请务必在cin后面加个getchar();
//法一
string s, ss;
cin>>s;
getchar();
getline(cin, ss);
cout<<ss<<endl;
//法二
string s;
char ss[20];
cin>>s;
getchar();
cin.getline(ss, 20);
cout<<ss;
读取字符串时用法同getline()的第二种用法
与getline()的区别是cin.get()会将结束符或换行符残留在输入缓冲区中,而getline不会,所以使用get后如果还要用除cin外的输入函数,就得加一个getchar()
char s[100];
cin.get(s, 10);
读取字符时
char c;
c = cin.get();
还可以和getchar一样读走缓冲区中不要的字符
cin.get();
字符串数组
char s[10];
gets(s);
gets和getline一样,不会将结束符或换行符留在缓冲区,不过如果缓冲区有结束符或换行符,他也会读进去,所以在前面要加个getchar()
char s[10];
gets(s);
cout<<s<<endl;
也可以用于二维字符数组
char s[3][10];
for(int i = 0; i < 3; ++i){
gets(s[i]);
}
for(int i = 0; i < 3; ++i){
cout<<s[i]<<endl;
}
getchar()会从缓冲区读走一个字符,如果输入多个字符,也只会读取第一个
char x = getchar();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。