首页 > 其他分享 >C中输入输出

C中输入输出

时间:2022-10-27 01:44:41浏览次数:50  
标签:输出 修饰符 转换 输入输出 整数 整型 printf

引入一个概念,对于计算机来说,外来数据都是输入,经过计算机处理的结果并进行显示的就是输出。在linux里面,一切都是文件,就连输入输出,都可以划归到"文件"一类,而为了管理这些文件,有个概念叫文件描述符,它们都是整数,对应着不同的文件。文件描述符0表示标准输入,文件描述符1表示标准输出,文件描述符2表示标准错误输出;标准输出和标准错误输出都对应硬件平台的屏幕,而标准输入通常对应键盘,这是最早期最简单的概念。伴随着计算机功能的强大,能处理的东西越来越多,这个概念也慢慢变得复杂模糊,以后会不会变真不清楚,就像现在的输入不单单是简单的键盘输入,就windows电脑而言,鼠标的移动、左右键的单击、u盘的插入其实都能算是输入了,而输出就是前者被电脑处理后的反应了,概念是基石,不是狭窄的通道,不要让它们限制了自我。

一、标准输入和标准输出

1.1 最早接触的scanf和printf

C标准库中针对标准输入输出的,最早接触的基本就这两个,都使用的格式字符串和参数列表且工作原理相同的两个函数。函数原型如下:

int scanf(char const *format,...);
int printf(char const *format,...);

格式化字符串中,经常遇到的就是格式转换符,统一一下:

转换符 说明(因为可以用于输入也可用于输出)
%d 十进制整数
%u 无符号整数
%hd 十进制短整数
%ld 十进制长整型整数
%x 无符号十六进制整数
%o 无符号八进制整数
副词# 添加在八进制或者十六进制转换符中,可以输出进制前缀,如#o、#x
------ ----------我是分割线-----------------------------
%c 代表单个字符
%f 浮点数,十进制计数
%e 浮点数,科学计数法,小写e
%E 浮点数,科学技术法,大写E
%g 自动调整精度,根据需要判断输出十进制计数还是科学计数%e
%G 自动调整精度,根据需要判断输出十进制计数还是科学计数%E
%a 十六进制浮点数,科学计数法,小写a(如果系统支持)
%A 十六进制浮点数,科学计数法,大写A(如果系统支持)
%Lf long double型,十进制计数,要用科学计数法表示也要添加L
------ -------------又是分割线------------------------------
%s 字符串
%p 指针
%% 一个百分号

上面的转换符既可用于printf输出也可用于scanf接收,但对于连续输入,还是要注意一下,不然很容易就出bug。(副词#一项不行,只可用于格式化输出)

根据目前我能找到的信息,C好像是不支持有符号整数的八进制和十六进制输出的,准确来说是不支持负数的八进制和十六进制,如果强行输出,得到的就是一个第一数位为1的二进制数转换来的非常大的一个数值,因为它以无符号来读取这个数并进行进制转换,用于输入也是同理。

printf的转换说明修饰符

上面的表格有提到一个副词#,这个其实就是转换说明修饰符之一,这些插入在%和转换符之间的符号,对转换加以修饰说明,所以称为转换说明修饰符,而在格式化输入里面不使用纯粹是为了降低复杂度,不然输入一个八进制整数,再加一个前缀'0',本来就是一连串字符了,再来一首这个,简直是难为胖虎。

修饰符 说明
五种标记 #,提示输出前缀
-,输出左对齐(默认输出是右对齐的)
+,确定正负添加对应+-
空格,对应正负输出空格或负号
0,确定了输出宽度的情况下,前面有空缺就用前导0补上
数字 最小字段宽度
在设置宽度不能容纳输出的数字或字符串时,系统自动调整宽度
.数字 突出顿号'.',设置输出精度
%e转%f,表示小数点右边数字位数
对于%s,表示输出字符串中字符数
对于整型则是宽度,有必要的时候情况下用前导0补充
%.f和%.0f等同,精度为0的意思
顿号前数字表示宽度,即一共输出多少位数字,但如果和顿号后面的精度产生冲突,以精度为准
h 常见于配合整型转换说明符,表示输出短整型
hh 输出unsigned char类型,就是单字节无符号整型
ll 常见于配合整型转换说明符,输出long long整型
L 配合浮点型转换说明符,输出long double型数值
t 配合整型转换说明符,输出ptrdiff_t类型值,指两指针差值的类型
z 配合整型转换说明符,输出size_t类型值,sizeof返回类型值,专用于检查存储字节大小

上面有个有意思的转换说明修饰符--hh,为了配合输出unsigned char类型整数,实际上,char类型只是用来存储字符,它在技术本质上还是整数类型,所以对应的也就有无符号char类型了,而hh就是为这个类型准备的。其实scanf的转换说明修饰符和printf的只有些许不同,比如(#、0、.数字)不适用,而scanf的*不适用于printf。

转换其实并没有改变本质,在计算机存储中,它们还是一个个二进制数,这只是用不同的规则来翻译这段二进制数的表征意义

总结一下,scanf和printf的工作都是转换--数值和文本之间的相互转换:从键盘输入的是文本,也就是字符串,输出到屏幕的也是字符串,而计算机本身存储的是数值。


更新中

标签:输出,修饰符,转换,输入输出,整数,整型,printf
From: https://www.cnblogs.com/Jack-artical/p/16830699.html

相关文章

  • 刷题——Python篇(1)输入输出
    #摘要第一部分输入输出非常简单,用到的知识点有`print()`:输出字符串`input()`:读取字符串`int()`:类型转换`f"{x:.2f}"`格式化字符串虽然简单,但是也有一些需要注意的地方。比......
  • 浅谈响应式更新在输入输出处理中的应用
    简介前端的一大重点是处理输入和输出,而vue的响应式系统给输入与输出的维护带来极大便利。将命令式操作转为响应式更新,我们不再需要为代码中充斥着大量手动的数据更新过......
  • c语言输入输出语句(c语言输入输出语句例子)
    C语言中常用语句有哪些呢?C语言中常用语句有哪些呢?以下是C语言中常用语句的精辟总结:跳转语句判断语句循环语句goto语句(“转舵”语句)if语句(“如果”语句)while语句(“当…......
  • C语言输入输出测试
    一、输入测试(1)输入数值测试三个%d之间的间隔分别为(无)(逗号)(空格)三种情况,应该如何正常输入,要求得到正确输出间隔分别为(空格时候),输入的时候以回车间隔是否可以?#include<......
  • day13 I/O流——字节输入输出流、字符输入输出流 & File常用类 & (字节)复制大文件
    day13I/O流定义:数据在两设备传输称为流,流是一组有顺序的,有起点和终点的字节集合I是input的缩写,表示输入流O是output缩写,表示输出流字节流(视频等)输入InputStream......
  • test34-文件输入输出序列化和反序列化 msgpack map用法
    #!/usr/bin/envpython#-*-encoding:utf-8-*-'''importcsvheaders=['学号','姓名','分数']rows=[('202001','张三','98'),('202002','李四','95'),('202003&......
  • JavaScript输入输出语句propmt、alert、console
    propmt是一个输入语句它的返回结果是你输入的内容,无论输入什么内容返回结果的数据类型都是字符串类型。alert是一个弹框输出console是控制台输出 下面代码的意思是输......
  • 输入输出
    输出cout输出格式cout<<; inta=3; doubleb=1.5; cout<<a; cout<<b;连续输出 inta=3; doubleb=1.5; cout<<a<<b;输出结果为​31.......
  • c语言三 输入输出
    整数溢出​ 计算一个整数的时候超过整数能够容纳的最大单位后,整数会溢出,溢出的结果是高位舍弃​ 当一个小的整数赋值给大的整数,符号位不会丢失,会继承大端对齐与小端......
  • C++注释、变量、常量、关键字、标识符、输入输出
    目录​​1.注释​​​​注释作用​​​​注释的方式​​​​2.变量​​​​变量基本知识​​​​定义变量​​​​3.常量​​​​常量基本知识​​​​整数常量​​​​浮点......