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

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

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

  2. C语言输入字符和字符串(所有函数大汇总)

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

  3. ACMNO.40 C语言-子串 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串

    题目描述 有一字符串,包含n个字符. 写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串. 输入 数字n 一行字符串 数字m 输出 从m开始的子串 样例输入 6 abcdef 3 样 ...

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

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

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

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

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

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

  7. 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成 为另一个字符串

    /*有一字符串,包含n个字符.写一函数,将此字符串中从第m个字符开始的全部字符复制成 为另一个字符串*/#include <stdio.h> #include <string.h&g ...

  8. 练习2-4:重新编写函数squeeze(s1,s2),将字符串s1中的任何字符与字符串时s2中的字符匹配的字符都删除

    #include <stdio.h> void squeeze(char s1[], char s2[]); int main(){/*练习2-4:重新编写函数squeeze(s1,s2) ...

  9. c++ 数组的输入遇到特定字符停止输入_C语言 第4章-字符串和格式化输入/输出

    #include 用数组name储存字符串,name数组有40个字节,每个字节储存一个字符值. 在scanf()函数中,输入字符串name没有&前缀. C预处理器把字符常量DENSITY定义为 ...

最新文章

  1. 多个网站共享一个mysql数据库_如何在多个Postgresql数据库之间共享表
  2. codebilcks怎么新建c++文件_赤峰将新建1280个公交候车亭丨明年,将对这6条街路实施改造|雨污分流|赤峰|候车亭|红山区|泵站...
  3. Angular 依赖注入
  4. linux bash中too many arguments问题的解决方法
  5. 输入输出流(I/O)
  6. 基于JBoss Fuse 6.2的JBoss BPM微服务集成指南
  7. [css] 实现单行文本居中和多行文本左对齐并超出显示“...“
  8. jenkins启动/重启/停止命令 改端口
  9. [置顶] ios 360度旋转效果demo
  10. MYSQL语句和多表查询
  11. 最近使用VirtualBox安装虚拟机,频繁崩溃。是不是有什么隐藏限制?
  12. 2016手机数据恢复软件哪个好?
  13. 该内存不能为written或read的解决方案(比较全)
  14. 软件版本的GA 代表什么意思?
  15. C#通过ToLower()方法将字符串转换成小写的代码
  16. HTML 图片热点map area使用方法
  17. python 接入百度地图数据包下载_Python爬虫-利用百度地图API接口爬取数据并保存至MySQL数据库...
  18. 美团:后端开发工程师(实习生)面试
  19. 如何理解高内聚,低耦合
  20. 使用nexus搭建maven私服(一)安装启动

热门文章

  1. CCF之地铁修建(100分)
  2. java char 打印_Java中char[]输出不是内存地址的原因详解
  3. ROS2学习(七).ROS概念 - ROS客户端库(Ros Client Library)
  4. 冒泡法排序c语言函数模板,使用模板技术的冒泡排序
  5. redmine 无法登录 mysql 服务器_Redmine 数据库连接错误
  6. 电脑基础操作_苹果电脑基础操作,和使用须知
  7. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task1地理数据分析常用工具
  8. iPad连android热点掉线,苹果终于承认,iOS 13有这个问题,网络断连的原因找到了...
  9. 居家洁士扫地机器人_掌握核心技术扫地机器人品牌推荐,由利和石头扫地机器人哪个牌子好?...
  10. JAVA连接Excel最好用的开源项目EasyExcel,官方使用文档及.jar包下载