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()。它是面向字符的输入方法。
#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')
#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
这种越界的情况有些编译器会报错的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。