字符输入函数总结

一、 cin >> 

    1. 接收一个字符

1 int main() {
2     char c;
3     cin >> c;
4     cout << c << endl;
5 
6     return 0;
7 }

    2. 接收一个字符串(以空格、Tab、回车结束)

 1 int main() {
 2     char c[10];
 3     string str;
 4     cin >> c;
 5     cin >> str;
 6     cout << c << endl;
 7     cout << str << endl;
 8 
 9     return 0;
10 }

    输出样例

aldgjdlg        dlfasdgjl
aldgjdlg
dlfasdgjl

 

二、 cin.get()

    1. 接收一个字符

1 int main() {
2     char c;
3     cin.get(c);
4     //c = cin.get(),两种方式均可
5     cout << c << endl;
6 
7     return 0;
8 }

    2. cin.get(字符数组名,接收字符数目) 允许接收空格

1 int main() {
2     char c[10];
3     cin.get(c, 10);
4     cout << c << endl;
5 
6     return 0;
7 }

    输出样例

adda
adda
//接收字符在范围内的情况

adg adagfgfhgshg
adg adagf
//超出范围,接收9个字符,还有一个'\0'

    3. cin.get() 舍弃输入流中的多余字符,作用类似于cin.ignore();

        有关 cin.ignore() 的知识可查看之前的博文—— cin 和 getline 混用中需要注意的问题

 

三、 cin.getline()

    1. cin.getline(字符数组名,接收字符数目, (结束字符))

        类似于之前 cin.get() 的第二种用法,不过多了一个结束字符的参数;

1 int main() {
2     char c[10];
3     cin.getline(c, 10);
4     cout << c << endl;
5 
6     return 0;
7 }

        注:接收字符数目可以更改,只要不超过字符数组大小;结束字符默认是 '\0' ,传入不同的值可以变更;

    输出样例

adfadf
adfadf
//在字符长度内的情况

aldjgdaadjadgd
aldjgdaad
//输入多出的情况,9个字符,最后还有一个'\0'

abcaaaa
ab
//传入第三个参数为'c'的情况

 

四、 getline()

    1. 接收一个字符串,针对于string类型使用,需添加头文件<string>

1 int main() {
2     string str;
3     getline(cin, str);
4     cout << str << endl;
5 
6     return 0;
7 }

 

    注:cin.getline() 和 getline() 是两个完全不同的函数,分属于<iostream> 和 <string> 两个头文件中,不要混淆!

 

五、 gets()

    1. 接收一个字符串,可包含空格

    本函数可以无限读取,不会判断上限,所以应该确保缓存空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值。这个事实导致gets函数只适用于玩具程序;

    可以使用 fgets() 代替 gets() 这个函数,具体细节这里不再赘述;

 

六、 getchar()

    1. 接收一个字符

1 int main() {
2     char c;
3     c = getchar();
4     cout << c << endl;    //不能写成getchar(c)
5 
6     return 0;
7 }

 

posted @ 2018-09-20 22:13  moujun  阅读(771)  评论(0编辑  收藏  举报