详解scanf与getchar
原文: (https://www.myjinji.top/articles/2020/07/22/1595399358246.html)[https://www.myjinji.top/articles/2020/07/22/1595399358246.html]
header
scanf 和 getchar 都是c中的输入函数,但它们在用法和原理上有着不同的地方,在刚开始使用时犯了很多错误,写篇博客总结一下;
scanf
int scanf(const char *format, ...)
scanf() 函数属于格式化函数,按照指定的既定格式从键盘上将数据输入到指定的变量中;
因为在 scanf() 语句中的格式中没有非格式字符在 "%d%d%d" 之间作为输入时的间隔,所以在输入时一定要用一个以上的空格或者回车作为两个输入数之间的间隔符
tips: scanf() 在读取数字时会自动跳过空格、制表符和换行符
实例1
int a, b, c;
printf("input int: ");
scanf("%d%d%d", &a, &b, &c);
printf("%d%d%d", a, b, c);
实例2
在变量为数字类型时,程序运行一切正常,我们将变量换成字符试试
char a, b, c;
printf("please input num a:\n");
scanf("%c", &a);
printf("please input num b:\n");
scanf("%c", &b);
printf("please input num c:\n");
scanf("%c", &c);
printf("%c, %c, %c", a, b ,c);
输出变得古怪了起来,程序没有让我们输入b的值,而是直接到了c,难道说b没有值吗?
并不是,b其实有数据,并且也输出了。我们可以分析一下源码,在输入1之后,我们按下了回车; 在c语言中回车键代表一个换行符(\n),于是立马就被b给接收了,之后就开始输入c的值。按照我们的输出语句,结果会按照a, b, c的格式输出它们的值,我们已经知道了a = 1, b = '\n', c = 2,所以结果才会显示为两行;
在说明 scanf 函数的时候就已经说了,scanf() 在接收数字的时候会自动略过空格、制表符、换行符,但在接收字符时就没有任何设置,所以就照单全收了;
getchar
int getchar(void)
该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
说完 scanf() 该聊聊 getchar() 了,与 scanf 一次能接收多个字符不同的是,getchar 每次只能读取单个字符
实例1
char a;
a = getchar();
printf("输入的字符是 %c", a);
即使我们输入了多个字符,getchar() 也只会读取一个字符
总结
根据 scanf 和 getchar 的特性,我们可以将这两个函数结合起来使用,将上面的代码修改一下
char a, b, c;
printf("please input num a:\n");
scanf("%c", &a);
getchar();
printf("please input num b:\n");
scanf("%c", &b);
getchar();
printf("please input num c:\n");
scanf("%c", &c);
printf("%c, %c, %c\n", a, b, c);
我们将每次回车所产生的换行符使用 getchar 接收,这样就不会出现接收错值的情况了
详解scanf与getchar的更多相关文章
- Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
一.gets() 函数详解 gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串. 调用格式为: gets(str); 其中str为字符串变量(字 ...
- Linux C 字符函数 getchar()、putchar() 与 EOF 详解
首先给出<The_C_Programming_Language>这本书中的例子: #include <stdio.h> int main() { int c; c = getc ...
- [转]keil使用详解
第一节 系统概述 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上.结构性.可读性.可维护性上有明显的优势,因而易学易用.用过 ...
- trie字典树详解及应用
原文链接 http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用 一.知识简介 ...
- qsort函数详解
C语言标准库函数 qsort 详解 文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. 原文链接:http://www.slyar.c ...
- 20160204.CCPP体系详解(0014天)
程序片段(01):define.h+data.h&data.c+control.h&control.c+view.h&view.c+AI.h&AI.c+main.c 内 ...
- 20160203.CCPP体系详解(0013天)
程序片段(01):数组.c+02.数组初始化语法.c 内容概要:数组 ///01.数组.c #include <stdio.h> #include <stdlib.h> //0 ...
- 20160129.CCPP体系详解(0008天)
程序片段(01):函数.c+call.c+测试.cpp 内容概要:函数 ///函数.c #include <stdio.h> #include <stdlib.h> //01. ...
- 20160124.CCPP详解体系(0003天)
程序片段(01):HelloCGI.c 内容概要:CGI_HelloWorld #include <stdio.h> //01.CGI程序的编写规范 // (1).HTML文本格式声明后面 ...
随机推荐
- 《我想进大厂》之Dubbo普普通通9问
这是面试专题系列第四篇,Dubbo系列.Dubbo本身并不复杂,而且官方文档写的非常清楚详细,面试中dubbo的问题一般不会很多,从分层到工作原理.负载均衡策略.容错机制.SPI机制基本就差不多了,最 ...
- 第十章 nginx常用配置介绍
一.虚拟主机 1.配置方式 #虚拟主机配置方式:1.基于多IP的方式2.基于多端口的方式3.基于多域名的方式 2.方式一:基于多IP的方式 1.第一个配置文件[root@web02 /etc/ngin ...
- 使用浏览器抓取QQ音乐接口(排行榜篇)
前言 最近手头比较空闲,再加上看到其他人的博客都差不多有个类似的播放控件,手就会闲不下来,说干就干,所以我们开始吧! 来到QQ音乐的官网,我们就直奔着目标去,寻找排行榜 我们主要用的是最近比较热的歌, ...
- Python基础知识点整理(详细)
Python知识点整理(详细) 输出函数 print()可以向屏幕打印内容,或者在打开指定文件后,向文件中输入内容 输入函数 input([prompt])[prompt] 为输入的提示字符.该函数返 ...
- Java异常ClassCastException
在说ClassCastException之前,先介绍下引用类型转换: 引用类型转换分为向上转型和向下转型两种: 向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的:当父类引用指向一 ...
- spring cloud gateway网关路由分配
1, 基于父工程,新建一个模块 2,pom文件添加依赖 <dependencies> <dependency> <groupId>org.springframewo ...
- Linux常用系统文件目录结构
Linux常用系统文件目录结构 bin:全称binary,含义是二进制.该目录中存储的都是一些二进制文件,文件都是可以被运行的. dev:该目录主要存放的是外接设备,例如硬盘.其他的光盘等.在其中的外 ...
- Pytorch中cudnn版本查询
问题: Disable or able cudnn,查询版本. Disable cudnn for batch_norm: (See: @Microsoft / human-pose-estimati ...
- 自动化运维Ansible-01-安装及简单的使用
实验环境:Centos 7.x Ansible版本:ansible 2.9.13 服务端的操作 1.系统默认的yum仓库中没有找到ansible,这里我们先安装epel源(需要用到CentOS-Bas ...
- pandas神器操作excel表格大全(数据分析数据预处理)
使用pandas库操作excel,csv表格操作大全 关注公众号"轻松学编程"了解更多,文末有公众号二维码,可以扫码关注哦. 前言 准备三份csv表格做演示: 成绩表.csv su ...