c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)
C语言输入字符和字符串(所有函数大汇总)
C语言有多个函数可以从键盘获得用户输入,它们分别是:
- scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
- getchar()、getche()、getch():这三个函数都用于输入单个字符。
- gets():获取一行数据,并作为字符串处理。
scanf() 是最灵活、最复杂、最常用的输入函数,上节我们已经进行了讲解,本节接着讲解剩下的函数,也就是字符输入函数和字符串输入函数。
输入单个字符
输入单个字符当然可以使用 scanf() 这个通用的输入函数,对应的格式控制符为%c,上节已经讲到了。本节我们重点讲解的是 getchar()、getche() 和 getch() 这三个专用的字符输入函数,它们具有某些 scanf() 没有的特性,是 scanf() 不能代替的。
1) getchar()
最容易理解的字符输入函数是 getchar(),它就是scanf("%c", c)的替代品,除了更加简洁,没有其它优势了;或者说,getchar() 就是 scanf() 的一个简化版本。
下面的代码演示了 getchar() 的用法:
#include int main(){ char c; c = getchar(); printf("c: %c", c); return 0;}
输入示例:
@↙c: @
你也可以将第 4、5 行的语句合并为一个,从而写作:
char c = getchar();
2) getche()
getche() 就比较有意思了,它没有缓冲区,输入一个字符后会立即读取,不用等待用户按下回车键,这是它和 scanf()、getchar() 的最大区别。请看下面的代码:
#include #include int main(){ char c = getche(); printf("c: %c", c); return 0;}
输入示例:
@c: @
输入@后,getche() 立即读取完毕,接着继续执行 printf() 将字符输出,所以没有按下回车键程序就运行结束了。
注意,getche() 位于 conio.h 头文件中,而这个头文件是 Windows 特有的,Linux 和 Mac OS 下没有包含该头文件。换句话说,getche() 并不是标准函数,默认只能在 Windows 下使用,不能在 Linux 和 Mac OS 下使用。
3) getch()
getch() 也没有缓冲区,输入一个字符后会立即读取,不用按下回车键,这一点和 getche() 相同。getch() 的特别之处是它没有回显,看不到输入的字符。所谓回显,就是在控制台上显示出用户输入的字符;没有回显,就不会显示用户输入的字符,就好像根本没有输入一样。
回显在大部分情况下是有必要的,它能够与用户及时交互,让用户清楚地看到自己输入的内容。但在某些特殊情况下,我们却不希望有回显,例如输入密码,有回显是非常危险的,容易被偷窥。
getch() 使用举例:
#include #include int main(){ char c = getch(); printf("c: %c", c); return 0;}
输入@后,getch() 会立即读取完毕,接着继续执行 printf() 将字符输出。但是由于 getch() 没有回显,看不到输入的@字符,所以控制台上最终显示的内容为c: @。
注意,和 getche() 一样,getch() 也位于 conio.h 头文件中,也不是标准函数,默认只能在 Windows 下使用,不能在 Linux 和 Mac OS 下使用。
对三个函数的总结
函数缓冲区头文件回显适用平台getchar()有stdio.h有Windows、Linux、Mac OS 等所有平台getche()无conio.h有Windowsgetch()无conio.h无Windows
输入字符串
输入字符串当然可以使用 scanf() 这个通用的输入函数,对应的格式控制符为%s,上节已经讲到了;本节我们重点讲解的是 gets() 这个专用的字符串输入函数,它拥有一个 scanf() 不具备的特性。
gets() 的使用也很简单,请看下面的代码:
#include int main(){ char author[30], lang[30], url[30]; gets(author); printf("author: %s", author); gets(lang); printf("lang: %s", lang); gets(url); printf("url: %s", url); return 0;}
运行结果:
YanChangSheng↙author: YanChangShengC-Language↙lang: C-Languagehttp://c.biancheng.net http://biancheng.net↙url: http://c.biancheng.net http://biancheng.net
gets() 是有缓冲区的,每次按下回车键,就代表当前输入结束了,gets() 开始从缓冲区中读取内容,这一点和 scanf() 是一样的。gets() 和 scanf() 的主要区别是:
- scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
- gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。
也就是说,gets() 能读取含有空格的字符串,而 scanf() 不能。
总结
C语言中常用的从控制台读取数据的函数有五个,它们分别是 scanf()、getchar()、getche()、getch() 和 gets()。其中 scanf()、getchar()、gets() 是标准函数,适用于所有平台;getche() 和 getch() 不是标准函数,只能用于 Windows。
scanf() 是通用的输入函数,它可以读取多种类型的数据。
getchar()、getche() 和 getch() 是专用的字符输入函数,它们在缓冲区和回显方面与 scanf() 有着不同的特性,是 scanf() 不能替代的。
gets() 是专用的字符串输入函数,与 scanf() 相比,gets() 的主要优势是可以读取含有空格的字符串。
scanf() 可以一次性读取多份类型相同或者不同的数据,getchar()、getche()、getch() 和 gets() 每次只能读取一份特定类型的数据,不能一次性读取多份数据。
c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)相关推荐
- C语言输入字符和字符串
在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个函数都 ...
- C语言输入字符和字符串(所有函数大汇总)
C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个 ...
- ACMNO.40 C语言-子串 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
题目描述 有一字符串,包含n个字符. 写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 6 abcdef 3 样 ...
- C语言-输入一行英文字符串统计单词个数
C语言-输入一行英文字符串统计单词个数,单词之间以空格隔开 判断是否为单词的依据,通过一个flag标识,flag为0表示字符为空格,接下来出现不是空格,会将flag置为1 只有当flag为1且当前字符 ...
- C语言中字符型和字符串型的对比
C语言中字符型和字符串型的对比 字符型: C语言中字符用单引号括起来,存储方式以ASCII编码二进制形式存储,占用一个字节 如:'a','b','c','A'等 注意:在C语言 ...
- C语言输出字符,字符串的ASCII码的16进制数
C语言输出字符,字符串的ASCII码的16进制数 /* file name : test.c cmd code : gcc -o test.exe test.c */ #include<stdi ...
- 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成 为另一个字符串
/*有一字符串,包含n个字符.写一函数,将此字符串中从第m个字符开始的全部字符复制成 为另一个字符串*/#include <stdio.h> #include <string.h&g ...
- 练习2-4:重新编写函数squeeze(s1,s2),将字符串s1中的任何字符与字符串时s2中的字符匹配的字符都删除
#include <stdio.h> void squeeze(char s1[], char s2[]); int main(){/*练习2-4:重新编写函数squeeze(s1,s2) ...
- c++ 数组的输入遇到特定字符停止输入_C语言 第4章-字符串和格式化输入/输出
#include 用数组name储存字符串,name数组有40个字节,每个字节储存一个字符值. 在scanf()函数中,输入字符串name没有&前缀. C预处理器把字符常量DENSITY定义为 ...
最新文章
- 多个网站共享一个mysql数据库_如何在多个Postgresql数据库之间共享表
- codebilcks怎么新建c++文件_赤峰将新建1280个公交候车亭丨明年,将对这6条街路实施改造|雨污分流|赤峰|候车亭|红山区|泵站...
- Angular 依赖注入
- linux bash中too many arguments问题的解决方法
- 输入输出流(I/O)
- 基于JBoss Fuse 6.2的JBoss BPM微服务集成指南
- [css] 实现单行文本居中和多行文本左对齐并超出显示“...“
- jenkins启动/重启/停止命令 改端口
- [置顶] ios 360度旋转效果demo
- MYSQL语句和多表查询
- 最近使用VirtualBox安装虚拟机,频繁崩溃。是不是有什么隐藏限制?
- 2016手机数据恢复软件哪个好?
- 该内存不能为written或read的解决方案(比较全)
- 软件版本的GA 代表什么意思?
- C#通过ToLower()方法将字符串转换成小写的代码
- HTML 图片热点map area使用方法
- python 接入百度地图数据包下载_Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库...
- 美团:后端开发工程师(实习生)面试
- 如何理解高内聚,低耦合
- 使用nexus搭建maven私服(一)安装启动
热门文章
- CCF之地铁修建(100分)
- java char 打印_Java中char[]输出不是内存地址的原因详解
- ROS2学习(七).ROS概念 - ROS客户端库(Ros Client Library)
- 冒泡法排序c语言函数模板,使用模板技术的冒泡排序
- redmine 无法登录 mysql 服务器_Redmine 数据库连接错误
- 电脑基础操作_苹果电脑基础操作,和使用须知
- 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task1地理数据分析常用工具
- iPad连android热点掉线,苹果终于承认,iOS 13有这个问题,网络断连的原因找到了...
- 居家洁士扫地机器人_掌握核心技术扫地机器人品牌推荐,由利和石头扫地机器人哪个牌子好?...
- JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载