令人头疼的数据输入,认识数据 输入输出

简介: 令人头疼的数据输入,认识数据 输入输出

在我们使用输入和输出函数的时候,总会出现一些莫名其妙的问题


97e530697cb2498d8adba4a62ed706d3.png

像这样与我们想输出的不符

今天就让我们深入认识输入输出函数


一、用scanf函数输入数据



1.printf函数和scanf函数的一般形式


printf(格式控制,输出列表)

scanf(格式控制,地址列表)


格式控制:是用一个双撇号(“  ”)括起来的字符串,称为格式控制字符串,它包含两个信息


  • 格式声明:是由“%”和格式字符组成,例如:%d,%f。它的作用是将输出的数据转化为指定的格式后输出
  • 普通字符:


地址列表::由若干个地址组成的列表,可以是变量的地址,可以是字符串首字符的地址。

2afba009bcb64169bbdd488e561e8308.png


2.格式字符


格式字符 说明
d 输入(输出)有符号的十进制数
u 输入(输出)无符号的十进制数
o 输入(输出)无符号的八进制数
x  X 输入(输出)无符号的十六进制数
c 输入(输出)单个字符
s 输入(输出)字符串
f 输入(输出)单精度浮点数
lf 输入(输出)双精度浮点数
域宽

指定输入数据所占的宽度(列数),域宽为正整数 

例:%7.2f   7表示这个数据宽度为7

                    .2表示这个数保留两位小数    



二、使用scanf函数应该注意的问题    



1.scanf函数中格式控制后边是变量地址,而不是变量名。


fe346c0beb244f7bb7378be081c85e7e.png

a8a27fe78d2447ee9ba2c991a85e6b12.png


如图:这种写法是错误的,要加上“&”


2.如果格式控制字符串中除了格式声明外的其他字符,在输入数据时要在对应的位置输入相同的字符。

d7ac3205300c4302885097fb2c6906b5.png


3.在用”%c“格式输入字符时,空格字符和“转义字符”中的字符都会作为有效字符输入


我们发现在输入时在两字符间加空格和不加空格输出的结果是不一样的


7812af4c097b4cfc8cf85b501c8a5d6c.pngb8aa869f4a574da8a607e76a2eeafd90.png


在两字符之间插入空格下,系统会把第一个字符‘a’送给ch1;第二个字符是空格字符‘  ’送给ch2;第三个字符‘b’送给ch3,这样就会打印出第二种情况。


注意:输入数值时,在两个数值之间需要插入空格(或其他分隔符),以使系统能区分两个数值。在连续输入字符时,在两字符之间不要插入空格或其他分隔符(除非在scanf函数中的格式字符串中有普通字符,这时输入时要在原位置插入字符),系统能区分两个字符。


4.在输入数值数据时,如输入空格、回车或遇到非法字符(不属于数值的字符)认为该数据结束。


763e92b44a9f4beb9796d7b9b8be4d07.png


第一个数据对应的%d的格式,在输入123之后遇到字符‘a’,因此系统认为数值123后面没有数字了,第一个数据到此结束,就把123给了变量a,变量b是%c的格式;将‘a’给变量b,第二个数据结束; ‘a’后面的数值应该给到变量c,但将‘0’错打成‘o‘,遇到字母o是非法字符,这是认为数值数据到此结束,就将123给了变量c,后面的字符无法读入。


三、字符输入输出函数



1.用putchar输出字符

bd9853ad66644f7e998fbbdc6be699bb.png4d6a9be57c944642bb21e955e17c61cf.png


我们改变代码,发现输出的结果是一样的,这是为什么呢?


我们知道字符类型也属于整型类型,因此将一个字符赋给字符变量将字符的ASCII值赋给赋给字符变量的作用是完全相同的(但应注意,整形数据的范围是0-127).putchar()函数是输出字符的函数,它输出的是字符而不能输出整数。66是字符B的ASCII值,因此,putchar(66)输出字符B。


说明:putchar(c)中的c可以是字符常量、整形常量、字符变量或整型变量。


2.用getchar函数输入字符


getchar函数只能接收一个字符,如果想输入多个字符要用多个getchar

392992e6e7864befa6544946c2415d7e.png


说明:用键盘输入信息时,并不是在键盘上敲一个字符,该字符就立即送到计算机中。这些字符先暂存在键盘的缓冲器中,只有按了Enter才把这些字符一起送到计算机中,然后按先后顺序赋给对应的变量。


如果每输入一个字符按一次Enter会发生什么情况

f79a6e38486c4bcea522909639310759.png


我们发现分别输出了两行B和O,这其中又是什么原因呢


其实我们在第一行输入的不是一个字符B,而是两个字符:B和换行符,其中B赋给了变量a,换行符赋给了变量b;第二行又输入两个字符:O和换行符,其中O赋给了变量c,换行符没有给任何变量。在输出时,就输出字符B,然后换行,再输出字符O,最后执行putchar(’\n‘)换行。


注意:getchar函数不仅可以从输入设备获得一个可显示的字符,而且可以获得在屏幕上无法显示的字符,如控制字符。


本次的内容到这里就结束啦。希望大家阅读完可以有所收获,同时也感谢各位读者三连支持。文章有问题可以在评论区留言,博主一定认真认真修改,以后写出更好的文章。  


相关文章
|
存储 算法 安全
终于有人用1.6W字把分布式算法的系统模型给彻底讲明白了!
系统模型-进程 在真实的分布式系统中,可能存在服务器(节点)、处理器、进程、线程等并发执行的实体。 在分布式算法中,这些实体都被抽象为进程。 注意,这里的进程与操作系统中的进程不完全是一个概念,后者侧重于描述一组资源的集合,例如文件句柄、地址空间、数据、代码等,还可以有多个线程,而前者是一个有状态的自动机。
956 3
|
人工智能 JSON 测试技术
语言模型悄悄偷懒?新研究:​上下文太长,模型会略过中间不看
语言模型悄悄偷懒?新研究:​上下文太长,模型会略过中间不看
137 0
|
C语言 Python
输入输出白话解析
输入和输出作为我们编程语言里面最基础的内容,其实没有必要在这里白扯,只要告诉大家是input()和print()即可!
90 0
输入输出白话解析
|
存储 芯片
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
472 0
复习单片机:8*8点阵---->点亮数字0(内含:1.设计思路+2.数字0的编程数据+3.原始代码+4.实验现象)(注:获得编程数据工具的下载和使用放在下一篇文章)
|
消息中间件 算法 架构师
学习方法:用输出倒逼输入
学习方法:用输出倒逼输入
学习方法:用输出倒逼输入
|
JavaScript 前端开发
我输入,你生成代码,手写代码生成
我输入,你生成代码,手写代码生成
177 0
我输入,你生成代码,手写代码生成
|
存储 编译器 程序员
第三章 格式化输入/输出《C语言程序设计现代方法(第2版)》读书笔记
第三章 格式化输入/输出《C语言程序设计现代方法(第2版)》读书笔记
第三章 格式化输入/输出《C语言程序设计现代方法(第2版)》读书笔记
|
存储 缓存 算法
《软件测试-基础理论》- 输入处理和输出
《软件测试-基础理论》- 输入处理和输出
|
XML 存储 算法
瞎研究之—JTS库使用样例
由于作者一时脑子没转过弯,找了一份新工作,工作内容转变很大,暂时都是围绕Gis来做。本篇博客是在工作学习过程中碰到的JTS库内容,建议不要看,如有需要直接去看源码,我这里写的很烂,瞎写。是我给自己做个记录,看看时间都花在哪里了!
3247 0
瞎研究之—JTS库使用样例
|
C语言
带你读《C语言程序设计教程 第4版》之三:数据的输入和输出
本书介绍利用C语言进行程序设计的基本知识。每章配有大量的习题,便于读者巩固所学知识,掌握程序设计的基本方法和编程技巧。