IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++读取字符串和字符的6种函数 -> 正文阅读

[C++知识库]c++读取字符串和字符的6种函数

综述:

字符串或字符的输入有好多个函数,scanf、getline()、cin.getline()、cin.get()、gets()、getchar()等

  • 如果输入是不带空格的字符串,那用什么都可以了,建议用scanf或cin
  • 如果输入带空格,那scanf、cin就用不了了,可以考虑以下方法:
    • 如果想用string类型的话,就用getline(cin, s)
    • 如果想用字符数组类型的话,可以用**cin.getline()、cin.get()、gets(),**这里不是特别建议用gets(),因为这个函数可能会出点奇怪的问题,也不建议用cin.get(), 因为这个函数既不能忽略缓冲区的换行符,还不能在输入后抹掉自己的结束符,建议使用cin.getline()
  • 如果输入的时候是单个字符,或者只想要字符串的第一个字符,就可以用getchar()、cin.get()

cin和cin.get都会将结束符或换行符留在缓冲区,而除cin外的函数都不能忽略缓冲区的结束符,所以如果用了cin,再用他们的时候记得加上getchar

scanf

scanf用于字符串数组,遇到空格或换行就停止

char str[10];
scanf("%s", str);
cout<<str<<endl;

getline()

可以接受空格,读取时遇到换行符结束

有两种读取方法,法一是string流,法二是iostream流,是两个不一样的函数

方法一:

使用string

string str;
getline(cin, str);
cout<<str<<endl;

方法二:

使用字符串数组

char str[100];
cin.getline(str, 20, '\n')
//cin.getline()里面三个参数,第一个是要储存的字符串数组,第二个是最大长度 + 1,最后一个位置用来存储'\0',也就是说你填20,但是只能存前19个字符,第三个是结束符,可省略,默认是换行符

注意??

程序的输入都建有一个缓冲区,每次输入的过程,其实是计算机先将输入的数据存在输入缓冲区中,而我们使用的输入函数是直接从缓冲区中读取数据。使用cin的时候,遇到空格和换行符和tab键就会停止,此时缓冲区就会有残留数据:空格、换行符、tab。cin和cin.get()从缓冲区读入的时候会自动忽略第一个空格、换行符、tab,就可以正常读入字符串,但有些函数并不能,比如 getline,gets,get, 他们就会直接读取缓冲区剩余的空格、换行符、tab,就导致需要输入的输不进去。

所以如果你使用getline()或gets()或者cin.get()之前用了cin或cin.get(),请务必在cin后面加个getchar();

//法一
string s, ss;
cin>>s;
getchar();
getline(cin, ss);
cout<<ss<<endl;

//法二
string s;
char ss[20];
cin>>s;
getchar();
cin.getline(ss, 20);
cout<<ss;

get()

读取字符串时用法同getline()的第二种用法

与getline()的区别是cin.get()会将结束符或换行符残留在输入缓冲区中,而getline不会,所以使用get后如果还要用除cin外的输入函数,就得加一个getchar()

char s[100];
cin.get(s, 10);

读取字符时

char c;
c = cin.get();

还可以和getchar一样读走缓冲区中不要的字符

cin.get();

gets()

字符串数组

char s[10];
gets(s);

gets和getline一样,不会将结束符或换行符留在缓冲区,不过如果缓冲区有结束符或换行符,他也会读进去,所以在前面要加个getchar()

char s[10];
gets(s);
cout<<s<<endl;

也可以用于二维字符数组

char s[3][10];
    for(int i = 0; i < 3; ++i){
        gets(s[i]);
    }
    for(int i = 0; i < 3; ++i){
        cout<<s[i]<<endl;
    }

getchar()

getchar()会从缓冲区读走一个字符,如果输入多个字符,也只会读取第一个

char x = getchar();
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:16:03  更:2021-08-31 15:18:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 20:52:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计