前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++中关于几种输入方法的总结

C++中关于几种输入方法的总结

原创
作者头像
zlmai
发布2018-08-26 15:31:43
1.4K0
发布2018-08-26 15:31:43
举报
文章被收录于专栏:zlmai的专栏

C++中有很多关于输入的函数,比如cin、cin.get()、cin.getline()、getline()、gets()等等,很容易搞混,下面分别总结下,欢迎补充指正~~

1、cin。它是C++中最基本的输入方法,可以输入数字、字符等,变量是什么类型就接收多少长度,遇到空格、Tab或回车时会终止

代码语言:txt
复制
#include <iostream>
int main()
{
    using namespace std;
    char a;
    cin >> a;
    cout << a << endl;
}

输入:abc aa

输出:a

2、cin.get()。它是面向字符的输入方法。

  • 如果待输入的对象是字符数组,那么应该是cin.get(字符数组名,接收字符数目),该方法可以接收空格和Tab
代码语言:txt
复制
#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(字符变量名):
代码语言:txt
复制
#include <iostream>
int main()
{
    using namespace std;
    char a;
    cin.get(a);
    cout << a << endl;
}

输入:abc

输出:a

3、cin.getline()。它是面向字符数组的输入方法。它的用法是cin.getline(字符数组名,接收字符数目),该方法可以接收空格和Tab。

代码语言:txt
复制
#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。

代码语言:txt
复制
#include <iostream>
int main()
{
    using namespace std;
    string a;
    getline(cin, a);
    cout << a << endl;
}

输入:ab f

输出:ab f

5、gets()。这个方法编译器提示不安全

6、getchar()。面向字符的输入方法:

代码语言:txt
复制
#include <iostream>
int main()
{
    using namespace std;
    char a;
    a=getchar();
    cout << a << endl;
}

输入:abc

输出:a

7、strcpy()。这个是面向字符数组的输入方法。此函数不会检查数组越界。

代码语言:javascript
复制
#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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档