目录

准备

1.getchar函数

1.1特点:

1.2getchar在缓存区接收字符

代码

显示

原因:

2.scanf

2.1读入字符

代码

显示

2.2读字符串

代码

显示

原因

3.扩展

3.1gets()函数

3.2数组越界

4.对比

4.1getchar优点

4.2scanf优点

5.注意


准备

  1. 空白字符:空格符、换行符(\n)
  2. 转换说明:%d、%s、%c等

1.getchar函数

C语言提供的一种输入单个字符的方法

1.1特点:

  • 每次调用getchar函数时,它会读入一个字符并将其返回,必须使用赋值(=)操作将其存储到变量中。
  • getchar返回的为接收字符的ASCII码值,返回一个int类型而不是char

我们使用证明代码如下:

输入的是4,而a显示的值却是52,查看上面的ASCII码表,4对于的ASCII码值为52。所以使用getchar变量得到的是对应字符的ASCII码值。

1.2getchar在缓存区接收字符

代码

int main()
{int a = 0;while ((a = getchar()) != EOF){printf("%c\n", a);}return 0;
}

显示

其中字符a和c之间有三行空白。

原因:

首先,在键盘中输入字符是存储到内存缓冲区,getchar函数一次只能接收一个字符。

我们是先输入a后又进行了换行操作时'\n'也被输入,此时变量a被赋值为字符'a'的ASCII码值,缓冲区中还有'\n',在循环内使用printf输出了字符'a',之后printf内的换行符进入第一个空格。

第一轮循环结束后,getchar在缓存区内取出'\n',之后printf再次输出两个换行符,一个是变量a内的一个是printf后的,共三个换行,三行空白。

2.scanf

转换说明%c允许scanf函数对单个字符进行行读(可对如何字符读取)

转换说明%s允许scanf函数把字符串读入字符数组

2.1读入字符

代码

int main()
{char a = 0;while (scanf(" %c", &a) != EOF){printf("%c\n", a);}return 0;
}

使用scanf函数接收字符时,也存在接收空白字符的情况,

为了强制使scanf函数在读入字符前跳过空白字符,需要在格式串中的转换说明%c前加上一个空格

显示

2.2读字符串

代码

int main()
{char a[10] = { 0 };scanf("%s", a);printf("%s\n", a);return 0;
}

显示

原因

scanf函数会跳过空白字符,然后读入字符并且存储到数组中,直到遇到空白字符为止,scanf函数读入字符串永远不会包含空白字符。

因此,scanf函数通常不会读入一整行输入。

3.扩展

3.1gets()函数

  1. 因为安全方面的原因,从C11起被废除了
  2. gets函数不会再开始读字符串之前跳过空白字符(scanf会跳过)
  3. gets函数会持续读入,直到找到换行符才停止(scanf函数会在任意空白字符处停止)
  4. gets函数会忽略换行符,不会把它存储到数组中,并用空字符('\0')代替换行符

3.2数组越界

把字符读入数组时,scanf函数和gets函数都无法检测数组合适被填满。当数组越界时,会导致未定义的行为。

可以使用%ns代替%s,数字n指出可以存储的最多字符数。

4.对比

4.1getchar优点

  • getchar函数比scanf函数的执行速度更快

原因:

  1. scanf函数是设计用来按不同的格式读不同类型数据的,getchar比scanf要简单的多
  2. 为了额外的速度提升,通常getchar函数是作为宏来实现的

4.2scanf优点

  • 相对与getchar可以更方便写入字符串
  • 可以改变转换说明读取输入个类型的数据

5.注意

在换行后使用getchar和scanf("%c")都是危险的动作,会造成数组或变量在读取数据时的失败。

千万小心。

七.getchar 和 scanf相关推荐

  1. getchar、scanf以及缓冲区的概念

    1.getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了. getch()和getche()是conio. ...

  2. C++中cin、cin.get()、cin.getline()、getline()、gets()、getchar()、scanf()等函数的用法

    转自:https://www.cnblogs.com/luolizhi/p/5746775.html 1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: #include & ...

  3. 浅谈getch(),getche(),getchar(),gets(),scanf()的区别

    getch(),getche(),getchar(),gets(),scanf()的区别,综合很多博客的文章. getch()和getchar() getchar()是C的标准库函数,包含在头文件&l ...

  4. getchar与scanf的区别

    getchar getchar先读取一个字符放到ch里面去,如果这个字符不等于EOF,就进入循环,打印这个字符.当getchar读到文件末尾或者结束时,它会返回一个EOF,此时结束循环. 输入A,输出 ...

  5. C语言中阶第一篇:分支和循环语句透析,包含getchar和scanf的详细介绍(本篇循环只到while)

    业精于勤荒于嬉,行成于思毁于随. 在笔者初阶的文章里,已经介绍过分支和循环语句,不过由于是初阶,所以并不细致,今天我们正式打开了中阶的大门,开始一步一步的深入C语言的学习. C语言是结构化的程序设计语 ...

  6. 【C语言】C语言学习整理-putchar,printf,getchar,scanf定义及区别

    1.定义 花一点时间认真阅读,这篇文章应该会让您多理解一点东西. 1.getchar getchar函数是字符输入函数,其功能是从键盘上获取一个输入字符. 读取方式: 从stdio(输入)流中读字符, ...

  7. 关于fgetc,getc,getchar和scanf的一些小知识

    在C语言中,一个char类型的字符可以用int型的数参照ASCII表来表示,比如 char ch = 49; printf("%c", ch); 这段代码会输出1,因为字符**'1 ...

  8. 探讨getchar与scanf的区别

    前言 说到scanf与getchar,想必大家都不陌生,在学习C语言的第一天起我们就开始接触它们,但我们对它们在输入方面可能有点模棱两可,分不清scanf与getchar真正有什么区别,下面就来分别探 ...

  9. C语言笔记 · 输入函数(scanf(),getchar(),getche(),getch(),gets())

    目录 输入函数 1. scanf() 1.1 scanf()理解 1.2 scanf()输入字符串 2. getchar() 3. getche() 4. getch() 5. gets() 总结 备 ...

最新文章

  1. 谷歌浏览器安卓版_谷歌翻译(在线翻译)下载-谷歌翻译下载安装安卓版v5.12.0...
  2. Python 引用全局变量提示:local variable referenced before assignment. 问题解决办法,global使用方法介绍
  3. jQuery获取元素内容
  4. hive(1)——用mysql进行元数据存储
  5. 曲线均匀分布_曲线篇:深刻理解B 样条曲线(下)
  6. java程序单引号报错,javapoigetInpuStream报错br/是这样的, 爱问知识人
  7. Windows编程—控制面板程序显示信息修改(程序图标、名称、链接等)
  8. java 最大子数组_[剑指offer题解][Java]连续子数组的最大和
  9. 使用js获取select选中文本
  10. 从入门到放弃之promise用法(上)
  11. pkuseg 和 jieba 分词对比测试,结果出乎意料...
  12. Go函数和方法的区别
  13. ftp服务器要什么配置文件,ftp服务器要求什么电脑配置
  14. 你吃的外卖,半年前就做好了
  15. Mark loves cat
  16. 传统的企业如何实现数字化转型?
  17. 二维数组中的查找(两种解法,各有千秋)
  18. GraphX与GraphLab、Pregel的对比
  19. Linux 配置nginx和php代理 ip访问
  20. seata-server

热门文章

  1. 拼多多资深程序员带你了解 ”砍一刀“的设计与实现
  2. python大学生信息管理系统_基于Python的高等学校社团信息管理系统
  3. Android关机闹钟实现
  4. Windows7瘦身优化
  5. opencv Scalar()的使用 心得
  6. sqlloader导出数据指定分隔符_来一份数据库全家桶~
  7. 单位根检验、协整检验和格兰杰因果关系检验三者之间的关系
  8. 旧服务器系统迁移移到虚拟机,服务器不关机进行虚拟机的迁移,vMotion 迁移
  9. 虚拟化技术 — 硬件辅助的虚拟化技术
  10. 对于DFA、NFA理解