C语言程序设计——输入输出函数

发布时间:2024年01月01日

写给自己

工作之后,已经好久没有学习编程、码代码了,因为最开始是从python开始接触的编程,所以对于一些底层的逻辑了解不够清晰,所以打算从0开始学习一下C语言程序。

C语言

关于其相关历史优劣等,在这里不再一 一赘述,主要说明一下C语言参考手册,这是最权威及官方的也是最权威的C语言参考文献,应该熟练并掌握运用和查询解决遇到的问题。

在这里插入图片描述
可以直接搜索creference,打开后是英文界面,但是不要慌,下方语言选择中文,就可以切换到中文模式了。我们可以看到上面的内容很全面,有语言,头文件,各种库的相关文件,我们以内存管理为例,点击进入后,可以看到,C语言与之相关的全部内容就展示出来了,使用时需要引入什么头文件,具体每一个函数的作用是什么。
在这里插入图片描述
参考手册更好的一点就是,我们查看某一项具体内容时候,里面不仅对于该函数有具体的解释,另外还有代码运行的完整实例更有助于我们的理解。而且该页面上的代码可进行编辑,可以及时试验突然的灵感。而且对于没有C语言环境的朋友也更友好。
在这里插入图片描述

输入输出函数

学习编程语言时,每个人的第一个程序应该都是打印一个“Hello World!”吧!C语言中的输入输出依赖的头文件是标准输入输出头文件<stdio.h>,点击后会看到有很多的内置函数,我们只需要找到这个就ok了,可以看到关于printf()函数,就有很多种,这里就不一一举例了,各位感兴趣的话可以自行查询了解。
在这里插入图片描述

printf()函数

#include<stdio.h>
 int printf( const char *restrict format, ... );------------------------------------(C99)
  restric format: 格式控制字符串
 ...:可变参数列表
 int:返回值-输出字符数量

格式控制字符串:式控制字符串,包含了两种类型的对象:普通字符和转换说明 。在输出时,普通字符将原样不动地复制到标准输出,转换说明并不直接输出而是用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明结束,从而说明输出数据的类型、宽度、精度等

可变参数列表等到函数的那个部分再去研究

printf()函数的返回值,很少会有人关注到printf会有返回值,printf返回的是打印的字符数量。有了这个概念我们可以尝试一下下面的小练习来进一步理解它的返回内容。
使用printf()函数表示,求解一个数字n的十进制表示的数字位数

在这里插入图片描述

scanf()函数

#include<stdio.h>
 int scanf( const char *restrict format, ... );------------------------------------(C99)
  restric format: 格式控制字符串
 ...:可变参数列表
 int:返回值-成功读入的参数个数

scanf()的返回值是成功读入的参数个数,通俗的解释就是,你赋值变量的个数。那么正常情况下,返回值是大于0的,如果出现返回0的情况,就是输入变量格式错误。看下面的示例,我们定义的变量n是整型的,输入数字时,会被正常接收,然后scanf则返回1。但当输入字符的时候,与变量定义类型不符,所以未被接收,则返回0.

在这里插入图片描述
在这里插入图片描述

scanf循环读入
在C语言中的<stdio.h>中定义了一个宏常量EOF(end of file)文件结束符。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。
那么从逻辑上来讲,如果scanf的返回值不等于EOF,那么就意味着后面依旧有可读入的内容,那么我们可以基于这个逻辑来写一个循环读入
在这里插入图片描述

在上述测试案例中可以看到,已经成功实现了循环读入的功能,但是还可以进一步思考和优化一个小问题,尽管上面输入的是整型,如果是输入字符串的话,可不可以输入带空格的字符串?

在这里呢可以使用正则表达式来解决,在scanf中是默认将空格、换行符、制表符等作为终止符的,所以在读入时遇见以上符号,会默认结束读入,那么我们可以通过字符匹配集来解决,只让换行符作为终止符。
可以看下面案例,已经成功把空格读入并输出了,但是出现了一个问题,就是程序陷入死循环了。
在这里插入图片描述

从运行结果上可以看到,在后面的过程中,scanf并没有读到任何参数。
scanf读入数据的形式是以字符流的形式读入的,当我们输入之后按下回车,实际上在缓冲区的字符是这样子的

sadasd asdas asdas \n

在换行符之前的内容被读入,然后遇到换行符停止读入,然后进行输入,当我们的循环第二次循行到这里的时候,会发现换行符留在了缓冲区里,会第一个读入,从而导致直接停止读入,使得程序陷入死循环。这时候我们需要在循环中加入一个getchar()来吸收缓冲区里的换行符。
在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_46640900/article/details/135314643
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。