C语言 输入输出

news2025/1/18 7:41:41

输出

printf

发送格式化输出到标准输出 stdout

调用格式

printf("<格式化字符串>",<参数表>);

头文件

stdio.h

声明

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

参数

format -- 是字符串,包含要被写入到标准输出 stdout 的文本。可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier,具体讲解如下:

打印%符号时,需要使用两个%%

附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含一个要被插入的值,替换 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

返回值

如果成功,返回写入的字符总数,否则返回一个负数

转义字符

putchar

头文件

stdio.h

声明

int putchar(int char)

调用格式

putchar(c);

  • 当c为一个被单引号(英文状态下)引起来的字符时,输出该字符(注:该字符也可为转义字符)
  • 当c为一个介于0~127(包括0及127)之间的十进制整型数时,它会被视为对应字符的ASCII代码,输出该ASCII代码对应的字符
  • 当c为一个事先用char定义好的字符型变量时,输出该变量所指向的字符

作用

把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中。其输出可以是一个字符,可以是介于0~127之间的一个十进制整型数(包含0和127),也可以是用char定义好的一个字符型变量。

返回值

输出正确时,返回输出字符转换为的 unsigned int 值

输出错误时,返回 EOF 文件结束符

puts

用于显示字符串,而且自动在显示的字符串末尾加上换行符

把字符串的地址作为参数传递给该函数即可使用

如何知道在何处停止?该函数在遇到空字符时就停止输出,所以必须确保有空字符。

fputs

fputs(str,stream);第一个参数是一个数组,包含要写入的以空字符终止的字符序列,第二个参数是指针,标识了要被写入字符串的流,当要打印在显示器上时,用定义在 stdout 作为该参数

fputs()和puts()的区别

1.fputs()函数的第 2 个参数指明要写入数据的文件。如果要打印在显示器上,可以用定义在stdio.h中的stdout(标准输出)作为该参数。

2.与puts()不同,fputs()不会在输出的末尾添加换行符。

注意,gets()丢弃输入中的换行符,但是puts()在输出中添加换行符。另一方面,fgets()保留输入中的换行符,fputs()不在输出中添加换行符。

输入

scanf

从标准输入流 stdin 中读取格式化输入

调用格式

scanf(格式化字符串,参数列表);

不要在 scanf 的格式化字符串的最后加 \n

头文件

stdio.h

声明

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

参数

format -- 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。format 说明符形式:[=%[*][width][modifiers]type=],具体讲解如下:

scanf 类型说明符:

附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

返回值

如果成功,该函数返回成功匹配和赋值的个数,如果达到文件末尾或发生读错误,则返回 EOF

注意

  • %d%d%d 是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。如果使用 ,来分隔输入的 %d, 相应的输入时也需要添加 ,,输入时,前一定要紧跟在数字后面,数字与,之间不能有空格。
  • 用%c输入时,空格和“转义字符”均作为有效字符

因为格式控制符之间没有空格,但是在输入时却输入了空格,使得读取时,先读取了第一个字符A,将其赋给a,然后再读取第二个字符时,继续读取,读取到下一个字符——空格,并将其赋给变量b

  • 格式控制符间有空格

两个格式控制符间出现空格,对变量的读取、存储不会影响,即,无论格式控制符是否存在空格,输入时均可输入无限多个空格,都可以被成功读取

  • 格式控制个数与地址表列不同
    • 如果地址表列个数多余格式控制,则只在缓冲区提取格式符个数个数据,多出的地址表列没有结果赋值,输出初始值
    • 如果格式控制个数多余地址表列,则在VS中报错,Dev C++ 中只录入地址表列个数个值

输入终止条件

  1. 遇 回车、跳格、空格
  2. 遇宽度结束
  3. 遇非法输入

getchar()

无参数,从输入队列中返回下一个字符

头文件

stdio.h

参数

无参数

声明

int getchar(void)

作用

读取字符。

若用户在按回车键之前输入了不止一个字符,其他字符会保留在键盘缓冲区,然后等待后续 getchar() 调用读取,也就是说,后续的 getchar() 调用不会等待用户按键,而是直接读取缓冲区中的字符,直到缓冲区的字符读取完毕后,才能等待用户按键。

返回值

返回用户输入的第一个字符的 ASCII 码,若出错返回 -1,且将用户输入的字符回显到屏幕。

gets

可以读取一整行输入,而不仅仅是一个单词。gets()函数简单易用,它读取整行输入,直至遇到换行符,然后丢弃换行符,存储其余字符,并在这些字符的末尾添加一个空字符使其成为一个C字符串。

只知道数组的开始处,并不知道数组中有多少个元素。如果输入的字符串过长,会导致缓冲区溢出,即多余的字符超出了指定的目标空间。

fgets

用fgets()来代替gets(),fgets()函数稍微复杂些,在处理输入方面与gets()略有不同。

通过第二个参数(指明它要写入的参数)限制读入的字符数来解决溢出问题。还函数专门设计用于处理文件输入,所以一般情况下可能不太好用。

fgets()和gets()的区别:

1.fgets()函数的第2个参数指明了读入字符的最大数量。如果该参数的值是n,那么fgets()将读入n-1个字符(第n个字符是空字符),或者读到遇到的第一个换行符为止。

2.如果fgets()读到一个换行符,会把它储存在字符串中。这点与gets()不同,gets()会丢弃换行符。

3.fgets()函数的第3 个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin(标准输入)作为参数,该标识符定义在stdio.h中。

char ch[10];

fgets(ch,n,stdin);//实际接收n-1个字符,第n个字符是空字符。

fgets()函数返回指向char的指针。如果一切进行顺利,该函数返回的地址与传入的第一个参数相同。但是,如果函数读到文件结尾,它将返回一个特殊的指针:空指针。该指针保证不会指向有效的数据,所以可用于标识这种特殊情况。在代码中,可以用数字0代替,不过在C语言中用宏NULL来代替更常见(如果在读入数据时出现某些错误,该函数也返回NULL)。

fgets()存储换行符有好处也有坏处。坏处是你可能并不想把换行符存储在字符串中,这样的换行符会带来一些麻烦。好处是对于存储的字符串而言,检查末尾是否有换行符可以判断是否读取了一整行。如果不是一整行,要妥善处理一行中剩下的字符。

如何处理掉换行符?一个方法是在已存储的的字符串中查找换行符,并将其代替成空字符。

如果仍有字符串留在输入行怎么办?一个可行的办法是,如果目标数组装不下一整行输入,就丢弃那些多出的字符

gets_s

C11新增的gets_s函数也可代替gets(),且该函数与gets()函数更接近,而且可以代替现有代码中的gets()。用一个参数限制读入的字符数。

gets_s()与fgets()的区别:

1.gets_s()只从标准输入中读取数据,所以不需要第3个参数。

2.如果gets_s()读到换行符,会丢弃它而不是储存它。

3.如果gets_s()读到最大字符数都没有读到换行符,会执行以下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直至读到换行符或文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”(或你选择的其他函数),可能会中止或退出程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1104177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm的安装和使用

目录 环境安装 环境安装 下载并安装 打开网站&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows 下拉到最下面 开始安装 运行pycharm

人工智能时代大模型算法之文心大模型4.0

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

VsCode通过Git History插件查看某个页面的版本修改记录

首先需要安装插件Git History 方式一&#xff1a;通过 点击File History 查看某个文件变更&#xff1b;即通过commit的提交记录去查看某个文件的修改 方式二&#xff1a;通过点击选择toggle File Blame 查看当前页面每一行所有提交修改记录

吃鸡达人必备:分享顶级干货+作图工具推荐+账号安全查询!

吃鸡达人们&#xff0c;你们好&#xff01;今天我来给大家介绍一些炙手可热的吃鸡话题&#xff0c;以及一些让你实力飙升的独家干货&#xff01; 首先&#xff0c;让我们说一下如何提高自己的游戏战斗力。作为一名专业吃鸡行家&#xff0c;我将与你们分享一些顶级游戏作战干货&…

Python数据分析实战-dataframe分组提取每一组的首条记录(附源码和实现效果)

实现功能 使用pandas库来进行DataFrame的分组和提取每一组的第一条记录 实现代码 import pandas as pd# 创建一个示例DataFrame data {Group: [A, A, B, B, C],Value: [1, 2, 3, 4, 5]} df pd.DataFrame(data)# 按照 Group 列进行分组&#xff0c;并提取每一组的第一条记录…

C语言标准库函数使用的参考方式

联网后&#xff0c;登录https://cplusplus.com/ 以string.h库中的函数为例 点击后直接跳转&#xff0c;可点击右下角的按钮&#xff0c;显示实际运行输出

c刷题[6]

目录 杨辉三角 杨氏矩阵 字符串左旋 判断字符串 公务员面试 改数字 数字三角形 输出不重复序列 杨辉三角 在屏幕上打印杨辉三角。 先转化成二维数组&#xff1a; 1 1 1 1 2 1 1 3 3 1 规律&#xff1a;每行第一个元素和最后一个元素为1(主对角),从第三行开始&#xff…

【算法挨揍日记】day15——560. 和为 K 的子数组、974. 和可被 K 整除的子数组

560. 和为 K 的子数组 560. 和为 K 的子数组 题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的连续子数组的个数 。 子数组是数组中元素的连续非空序列。 解题思路&#xff1a; 我们可以很容易想到暴力解法&#xf…

C++对象模型(11)-- 虚基类

1、虚基类的引入 我们再来复习一下“多重继承的对象布局”&#xff0c;假设继承的类结构是这样的&#xff1a; 相应的代码&#xff1a; class W { public:int i_w; }; class X : public W {}; class Y : public W {}; class Z : public X, public Y {}; 我们在main()函数中加…

BUUCTF题解之[极客大挑战 2019]EasySQL 1

1.题目分析 考查sql注入的基本使用。 1.sql注入的定义 SQL注入是一种针对Web应用程序的攻击技术&#xff0c;通过在应用程序的用户输入参数中嵌入SQL代码&#xff0c;进而攻击应用程序的数据库。 攻击者可以通过SQL注入来获取敏感信息、执行无权执行的操作、甚至完全控制数据…

tomcat的部署以及优化

tomcat的介绍 Tomcat的简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器&#xff0c;是 Apache 软件基金会的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat 属于轻量…

Go项目踩坑:go get下载超时,goFrame框架下的go项目里将vue项目的dist同步打包发布,go项目打包并压缩

Go项目踩坑&#xff1a;go get下载超时&#xff0c;goFrame框架下的go项目里将vue项目的dist同步打包发布&#xff0c;go项目打包并压缩 go get下载超时goFrame打包静态资源vue项目打包gf pack生成go文件 静态资源使用打包发布go项目交叉编译&#xff0c;省略一些不必要的信息通…

黑客利用人工智能窃取医疗数据的 7 种方式

人工智能被描述为医疗保健行业的一把双刃剑。基于人工智能的系统可以分析大量数据并在早期和可治疗的阶段检测疾病&#xff0c;它们可以比任何人类更快地诊断症状&#xff0c;并且人工智能正在帮助药物开发&#xff0c;使新的救命药物得以识别并将其推向市场速度更快且成本显着…

三集合容斥原理整理

三集合容斥原理的三个公式都是怎么被推导出来的&#xff1f; - 刘明哲的回答 - 知乎 https://www.zhihu.com/question/465008307/answer/2251909478 你必须知道的行测数量知识&#xff08;七&#xff09;容斥问题 - 跟我考公吧的文章 - 知乎 https://zhuanlan.zhihu.com/p/4271…

基于若依框架的药品管理系统

若依框架每张表共有的五个属性&#xff1a; 更改若依后端代码时创建新的module&#xff0c;选择maven&#xff0c;继承ruoyi。 创建实体类时继承BaseEntity&#xff0c;这个类有创建人&#xff0c;创建时间等五个字段&#xff0c;这个类在其它模块中&#xff0c;需要在depende…

在.Core中用EF添加数据库实体类

首先安装dotnet-ef工具&#xff0c;否则提示&#xff1a; *无法执行&#xff0c;因为找不到指定的命令或文件。 可能的原因包括: *你拼错了内置的 dotnet 命令。 *你打算执行 .NET Core 程序&#xff0c;但 dotnet-ef 不存在。 你打算运行全局工具&#xff0c;但在路径上找不到…

SNAP对Sentinel-1预处理

SNAP对Sentinel-1预处理 一、导入数据 二、轨道校正 点击run开始处理 三、噪声去除 打开S-1 Thermal Noise Removal工具 如果选中了VH&#xff0c;就只会输出一个VH极化结果 四、辐射定标 Run 五、滤波处理 六、地形校正 这边的dem需要自己下载 dem下载地址 如果一格…

Orleans的成员管理和故障检测故障检测

Orleans的成员管理和故障检测故障检测 简介 Orleans框架是一个基于.NET平台的开源分布式系统框架&#xff0c;用于开发可扩展&#xff0c;高可用&#xff0c;高性能的云服务应用程序。它采用了Actor模型&#xff0c;将分布式系统中的各个节点抽象成为Actor&#xff0c;使得开…

Linux入门---页表的理解

目录标题 第一次认识页表第二次认识页表如何看待页表页表的大致构成 第一次认识页表 我们第一次认识页表是在介绍地址空间的时候&#xff0c;我们知道操作系统将内存划分为好几个区域&#xff0c;比如说栈区&#xff0c;堆区&#xff0c;未初始化区&#xff0c;已初始化区&…

力扣刷题 day47:10-17

1.位1的个数 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中数字位数为 1 的个数&#xff08;也被称为汉明重量&#xff09;。 方法一&#xff1a;逐个判断 利用n&1 #方法一&#xff1a;逐个…