字符输入函数总结
一、 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 }