C++ 中有很多关于输入的函数, 比如 cin,cin.get(),cin.getline(),getline(),gets()等等, 很容易搞混, 下面分别总结下, 欢迎补充指正~~
1,cin. 它是 C++ 中最基本的输入方法, 可以输入数字, 字符等, 变量是什么类型就接收多少长度, 遇到空格, Tab 或回车时会终止.
- #include <iostream>
- int main()
- {
- using namespace std;
- char a;
- cin>> a;
- cout <<a << endl;
- }
输入: abc aa
输出: a
2,cin.get(). 它是面向字符的输入方法.
如果待输入的对象是字符数组, 那么应该是 cin.get(字符数组名, 接收字符数目), 该方法可以接收空格和 Tab:
- #include <iostream>
- int main()
- {
- using namespace std;
- char a[20];
- cin.get(a,20);
- cout <<a << endl;
- }
输入: abc abc abc abc abc abc (23 个字符)
输出: abc abc abc abc abc (19 个字符 + 1 个'\0')
如果带输入的对象是字符变量, 那么应该是 cin.get(字符变量名):
- #include <iostream>
- int main()
- {
- using namespace std;
- char a;
- cin.get(a);
- cout <<a << endl;
- }
输入: abc
输出: a
3,cin.getline(). 它是面向字符数组的输入方法. 它的用法是 cin.getline(字符数组名, 接收字符数目), 该方法可以接收空格和 Tab.
- #include <iostream>
- int main()
- {
- using namespace std;
- char a[20];
- cin.get(a,20);
- cout <<a << endl;
- }
输入: abc abc abc abc abc abc (23 个字符)
输出: abc abc abc abc abc (19 个字符 + 1 个'\0')
乍一看, cin.getline()和 cin.get()好像没区别, 但是, 当用户输入完毕回车时, cin.getline()不会再在输入缓冲中保存换行符, 而 cin.get()会 (当然, cin 也会). 就是说, 如果输入一行字符串, 如果用 cin.getline(), 那么当内容输入到变量中后, 输入缓冲中也不会有回车符, 不会影响下一个输入函数的读取; 而如果是 cin.get(), 那么当内容输入到变量中后, 输入缓冲中还会有个回车符, 就会影响后面的输入语句. 一般可以通过 cin.get(字符数组名, 接收字符长度).get() 的方法, 把那个留在输入缓冲中的回车符取出来.
当输入的字符串比分配的空间更长时, cin.getline()和 cin.get()会把余下的字符留在输入缓冲中, cin.getline()还会设置失效位, 并关闭后面的输入.
4,getline(). 它是面向 string 字符串的输入方法. 用法是 getline(cin, 字符串名), 该方法可以接收空格和 Tab.:
- #include <iostream>
- int main()
- {
- using namespace std;
- string a;
- getline(cin, a);
- cout <<a << endl;
- }
输入: ab f
输出: ab f
5,gets(). 这个方法编译器提示不安全
6,getchar(). 面向字符的输入方法:
- #include <iostream>
- int main()
- {
- using namespace std;
- char a;
- a=getchar();
- cout <<a << endl;
- }
输入: abc
输出: a
7,strcpy(). 这个是面向字符数组的输入方法. 此函数不会检查数组越界.
- #include <iostream>
- int main()
- {
- using namespace std;
- char a[3];
- strcpy(a,"affd sfasdfsdf");
- cout << a[5] << endl;
- cout << a << endl;
- }
输出:
s
affd sfasdfsdf
这种越界的情况有些编译器会报错的.
来源: https://www.qcloud.com/developer/article/1195080