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<stdio.h>
intmain()
{
char c;c =getchar();
printf("c: %c\n", c);return0;
}

输入示例:

@↙
c: @

你也可以将第 4、5 行的语句合并为一个,从而写作:

char c = getchar();

2) getche()

getche() 就比较有意思了,它没有缓冲区,输入一个字符后会立即读取,不用等待用户按下回车键,这是它和 scanf()、getchar() 的最大区别。请看下面的代码:

#include<stdio.h>
#include<conio.h>
intmain()
{
char c =getche();
printf("c: %c\n", c);return0;
}

输入示例:

@c: @

输入@后,getche() 立即读取完毕,接着继续执行 printf() 将字符输出,所以没有按下回车键程序就运行结束了。

注意,getche() 位于 conio.h 头文件中,而这个头文件是 Windows 特有的,Linux 和 Mac OS 下没有包含该头文件。换句话说,getche() 并不是标准函数,默认只能在 Windows 下使用,不能在 Linux 和 Mac OS 下使用。

3) getch()

getch() 也没有缓冲区,输入一个字符后会立即读取,不用按下回车键,这一点和 getche() 相同。getch() 的特别之处是它没有回显,看不到输入的字符。所谓回显,就是在控制台上显示出用户输入的字符;没有回显,就不会显示用户输入的字符,就好像根本没有输入一样。

回显在大部分情况下是有必要的,它能够与用户及时交互,让用户清楚地看到自己输入的内容。但在某些特殊情况下,我们却不希望有回显,例如输入密码,有回显是非常危险的,容易被偷窥。

getch() 使用举例:

#include<stdio.h>
#include<conio.h>
intmain()
{
char c =getch();
printf("c: %c\n", c);return0;
}

输入@后,getch() 会立即读取完毕,接着继续执行 printf() 将字符输出。但是由于 getch() 没有回显,看不到输入的@字符,所以控制台上最终显示的内容为c: @。

注意,和 getche() 一样,getch() 也位于 conio.h 头文件中,也不是标准函数,默认只能在 Windows 下使用,不能在 Linux 和 Mac OS 下使用。

对三个函数的总结

函数

缓冲区

头文件

回显

适用平台

getchar()

stdio.h

Windows、Linux、Mac OS 等所有平台

getche()

conio.h

Windows

getch()

conio.h

Windows

输入字符串

输入字符串当然可以使用 scanf() 这个通用的输入函数,对应的格式控制符为%s,上节已经讲到了;本节我们重点讲解的是 gets() 这个专用的字符串输入函数,它拥有一个 scanf() 不具备的特性。

gets() 的使用也很简单,请看下面的代码:

#include<stdio.h>
intmain()
{
char author[30], lang[30], url[30];
gets(author);
printf("author: %s\n", author);
gets(lang);
printf("lang: %s\n", lang);
gets(url);
printf("url: %s\n", url);return0;
}

运行结果:

YanYan↙

author: YanYan

C-Language↙

lang: C-Language

https://www.csdn.net/

url: https://www.csdn.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语言输入字符和字符串(所有函数大汇总)相关推荐

  1. c++ 字符串合并_C语言输入字符和字符串(所有函数大汇总)

    C语言输入字符和字符串(所有函数大汇总) C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar() ...

  2. C语言输入字符和字符串

    在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据. getchar().getche().getch():这三个函数都 ...

  3. c语言英文字符转数字,C语言常用数字和字符串转换函数(国外英文资料).doc

    C语言常用数字和字符串转换函数(国外英文资料) C语言常用数字和字符串转换函数(国外英文资料) C language commonly used Numbers and string conversi ...

  4. C语言-输入一行英文字符串统计单词个数

    C语言-输入一行英文字符串统计单词个数,单词之间以空格隔开 判断是否为单词的依据,通过一个flag标识,flag为0表示字符为空格,接下来出现不是空格,会将flag置为1 只有当flag为1且当前字符 ...

  5. C语言中字符型和字符串型的对比

    C语言中字符型和字符串型的对比 字符型:     C语言中字符用单引号括起来,存储方式以ASCII编码二进制形式存储,占用一个字节     如:'a','b','c','A'等     注意:在C语言 ...

  6. c语言校验mac函数,C语言验证MAC地址字符串合法性函数

    C语言验证MAC地址字符串合法性函数 2019-01-06 C语言验证MAC地址字符串合法性函数,使用示例: char *mac_addr = "00:1d:08:c3:8a:00" ...

  7. C语言输出字符,字符串的ASCII码的16进制数

    C语言输出字符,字符串的ASCII码的16进制数 /* file name : test.c cmd code : gcc -o test.exe test.c */ #include<stdi ...

  8. c语言学习-对从键盘输入的一个字符串中的大英字母及数字进行计数

    对从键盘输入的一个字符串中的大英字母及数字进行计数 程序流程图: 代码: #include<stdio.h> void main() {char ch[10]; int i=0,j=0; ...

  9. c语言中空格字符怎么表示_C语言中常用的字符串操作函数

    作者:陈太浪 出处:https://home.cnblogs.com/u/TomHe789/ C语言中提供了许多的字符串操作函数,常见的字符串操作函数有以下几种: 1.求字符串长度的函数 原型函数:s ...

最新文章

  1. 桌面应用程序 azure_如何开始使用Microsoft Azure-功能应用程序,HTTP触发器和事件队列...
  2. 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(7)--- 事件处理模式与反应器...
  3. CORS support in Spring Framework--官方
  4. 控件尺寸规范_微信小程序设计规范你了解多少
  5. 做科研没人带,发不了文章怎么办?
  6. IT基础结构-1.DC-DNS-安装
  7. Xamarin.Forms 5.0 来了
  8. 微软推出《我的世界》“编程一小时”免费教程,携手Code.org普及计算机科学教育
  9. Taro+react开发(25)三元
  10. linux报网络设备繁忙,【分享】linux常用命令
  11. 鸿蒙开发者测评,看了下鸿蒙开发者测试版本
  12. 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
  13. QuickHit游戏
  14. BZOJ3456: 城市规划 多项式求逆
  15. 二维dtw算法matlab实现,下载的用MATLAB实现的DTW算法,不会用,跪求大神帮忙
  16. 牛客网 多校3 I三角形(皮克定理)
  17. CVPR 2021 论文大盘点-医学影像篇
  18. WPS加载项系列(3)WPS项目部署
  19. NX/UG二次开发创建曲面偏置体
  20. 关于dd命令的使用以及详解

热门文章

  1. 计算机期刊在线阅读,计算机学术期刊会议排名.doc
  2. CentOS7时间同步NTP服务安装及配置
  3. Spark 定制版:015~Spark Streaming源码解读之No Receivers彻底思考
  4. VS2015+OpenCV3.4.1鱼眼相机标定校正
  5. 计算机应用技术推荐笔记本,学数字媒体应用技术需要什么电脑配置?笔记本.推荐我一款?...
  6. 电商购物车设计(附案例学习)
  7. bitdock系统错误_BitDock下载_BitDock比特工具栏 v1.6官方最新版_系统之家
  8. NVisual网络可视化工具——智能推荐链路
  9. OpenCV-Python介绍
  10. Android音视频编辑库,Android音视频处理.pdf