C语言输入输出函数的介绍以及工作原理

c语言中的printf()函数 和 scanf() 函数可以说是用得最多的函数,分别是输入/输出函数,也简称 I/O函数,两个函数的工作原理几乎相同,都使用格式字符串和参数列表,今天我们就好好聊聊这两个函数。

printf() 函数

printf() 函数的格式:

printf(格式字符串,待打印项1,待打印项2.....);

待打印项都是要打印的项,可以是常量、变量,甚至可以是需要计算的表达式。
而格式字符串则需要包含每个待打印项的转换说明。

补充一下什么是转换说明,就是用来把数据(待打印项的内容)转换成可显示的形式(数据所呈现出来的样子),下面是一些常见的转换说明。

转换说明输出
%c单个字符
%d整数
%s字符串
%f浮点数
%p指针
%%打印一个百分号

举个例子,

printf("You look great in %s\n",color);

其中第一个双引号里面的内容就是格式字符串,color就是待打印项列表,%s表示显示的内容是一个字符串,如果color的值是yellow,那么到时候代码运行之后的结果就是:
You look great in yellow.

要注意的是格式字符串中的转换说明一定要与后面的每个项相匹配,否则可能会报错。

如果只打印短语或句子,也就是常量,就不需要用转换说明。如:

printf("hello world!");
printf("我有100块钱")

在c语言中,大部分的函数都有一个返回值,printf() 函数也有返回值,它返回的是打印字符的个数,如果输出错误,printf() 则返回一个负值。举个例子:
在这里插入图片描述

在这里插入图片描述

程序用 rv = printf(…); 的形式把printf()的返回值赋给rv,该语句执行了两项任务,打印信息和给变量赋值,其次注意针对所有字符数,包括空格和换行符也计算在里面。

scanf() 函数

scanf()和printf() 类似,使用格式字符串和参数列表。scanf()中的格式字符串表明字符输入流的目标数据类型。两个函数主要的区别在参数列表中。printf()函数使用常量、变量和表达式,而scanf() 函数使用指向变量的指针。不懂指针也没关系,记住下面两条规则就行:

如果用scanf() 读取基本变量类型的值,在变量名前面加上一个&
如果用scanf() 把字符串读入字符数组中,不要使用&

举个例子:
在这里插入图片描述在这里插入图片描述
如果运行代码提示scanf没有返回值可以像作者一样改为scanf_s;另外如果代码没错运行出错的话参考文章:http://t.csdnimg.cn/xz5nI

从scanf() 角度看输入

接下来我们将更详细地研究scanf() 怎样读取输入。假设scanf()根据一个%d转换说明读取一个整数。scanf() 函数每次读取一个字符,跳过所有的空白字符,直至遇到第1个非空白字符才开始读取。因为要读取整数,所以scanf()希望发现一个数字字符或者一个符号(+或-)。如果找到一个数字或符号,它便保存该字符,并读取下一个字符。如果下一个字符是数字,它便保存该数字并读取下一个字符。scanf()不断地读取和保存字符,直至遇到非数字字符(包括空白)。如果遇到一个非数字字符,它便认为读到了整数的末尾。然后,scanf()把非数字字符放回输入。这意味着程序在下一次读取输入时,首先读到的是上一次读取丢弃的非数字字符。最后,scanf()计算已读取数字(可能还有符号)相应的数值,并将计算后的值放入指定的变量中。

而如果第1个非空白字符是A而不是数字,scanf() 将停在那里,并把A放回到输入中,不会把值赋给指定变量。程序在下一次读取输入时,首先读到的字符是A。

如果程序只使用%d 转换说明,scanf() 就一直无法越过A读取下一个字符。另外,如果使用带多个转换说明的scanf() ,C规定在第一个出错的地方停止读取输入。

用其它数值匹配的转换说明读取输入和用%d 的情况相同。

如果使用%s 转换说明,scanf() 会读取除空白以外的所有字符。这意味着你输入的是一个用空白的句子,最后得到的是一个字符串,去除空白的字符串。还有一点要注意的是,当scanf() 把字符串放进指定数组时,会自动在字符序列的末尾加上’\0‘,让数组中的内容成为一个C字符串。

格式字符串中的普通字符

scanf()函数允许把普通字符放在格式字符串中,除了空白字符外其余的必须与输入字符串严格匹配。

scanf("%d,%d",&m,&n);

scanf()函数读取到的:用户输入了一个数字,一个逗号,再输入一个数字。也就是说用户必须像下面这样进行输入两个整数:

23,45
scanf的返回值

scanf()函数返回成功读取的项数。如果没有读取任何项,且需要读取一个数字而用户输入一个非数值字符串,scanf() 便返回0。

以上的全部内容就是C语言中输入和输出函数的一些简单介绍,写得不好的地方请大家多多包涵,如果有错误的地方欢迎各位大佬指正!!!

  • 37
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值