6、C语言:输入与输出

news2024/11/20 22:39:50

输入输出

  • 标准输入输出
    • getchar&putchar函数
    • printf函数
    • sprintf函数
    • 格式化输入——scanf函数
  • 文件访问
    • 文件读写
  • 错误处理:stderr和exit
  • 行输入和行输出
  • 常用函数
    • 字符串操作函数
    • 字符类别测试和转换函数
    • 存储管理函数
    • 数学函数
    • 随机数发生器函数
    • 其他

标准输入输出

getchar&putchar函数

使用输入/输出库函数的每个源程序文件必须包含:

#include<stdio.h>
int getchar(void);  //从标准输入中(一般为键盘)一次读取一个字符
int putchar(int);   //用于输出数据。putchar(c)将字符c送至标准输出上
printf();

许多程序只从一个输入流中读取数据,并且只向一个输出流中输出数据。对于这样的程序,只需要使用函数getchar、putchar和printf实现输入/输出即可。

  • 格式化输出——printf函数
int printf(char *format, arg1, arg2, ...)

函数printf在输出格式format的控制下,将其参数进行转换与格式化,并在标准输出设备上打印出来。它的返回值为打印的字符数。

printf函数

普通字符和转换说明。
普通字符将原样不动地复制到输出流中,而转换说明都由一个百分字符(既%)开始,并以一个转换字符结束。在字符%和转换字符中间可能依次包含下列组成部分:

  • 负号,用于指定被转换的参数按照左对齐的形式输出。
  • 数,用于指定最小字段宽度。转换后的参数将打印不小于最小字段宽度的字段。如果有必要,字段左边(如果使用左对齐的方式,则为右边)多余的字符位置用空格填充以保证最小字段宽。
  • 小数点,用于将字段宽度和精度分开。
  • 数,用于指定精度,即指定字符串中要打印的最大字符数、浮点数小数点后的位数、整型最少输出的数字数目。
  • 字母h或l,字母h表示不将整数作为short类型打印,字母l表示将整数作为long类型打印。
    printf函数基本的转换说明
    示例:
    在转换说明中,宽度或精度可以用星号*表示,这时,宽度或精度的值通过转换下一参数(必须为int类型)来计算。
printf("%.*s", max, s);  //为了从字符串s中打印最多max个字符。

在打印字符串"hello, world"(12 个字符)时根据不同的转换说明产生的不同结果:

:%s:       :hello, world:
:%10s:     :hello, world:
:%.10s:    :hello, wor:
:%-10s:    :hello, world:
:%.15s:    :hello, world:
:%-15s:    :hello, world   :
:%15.10s:  :     hello, wor:
:%-15.10s: :hello, wor    :

sprintf函数

函数sprintf执行的转换和函数printf相同,但它将输出保存到一个字符串中:

int sprintf(char *string, char *format, arg1, arg2, ...);   //string需要足够大

格式化输入——scanf函数

输入函数 scanf 对应于输出函数printf,它在与后者相反的方向上提供同样的转换功能。

int scanf(char *format, ...)

还有一个输入函数sscanf,它用于从一个字符串(而不是标准输入)中读取字符序列:

int sscanf(char *string, char *format, arg1, arg2, ...)

格式串通常都包含转换说明,用于控制输入的转换。格式串可能包含下列部分:

  • 空格或制表符,在处理过程中将被忽略。
  • 普通字符(不包括%),用于匹配输入流中下一个非空白符字符。
  • 转换说明,依次由一个%、一个可选的赋值禁止字符*、一个可选的数值(指定最大字段宽度)、一个可选的h、l 或L 字符(指定目标对象的宽度)以及一个转换字符组成。

文件访问

FILE *fp;
FILE *fopen(char *name, char *mode);
fp = fopen(name, mode);

fopen用文件外部名与操作系统进行某些必要的连接和通信(我们不必关心这些细节),并返回一个随后可以用于文件读写操作的指针。该指针称为文件指针,它指向一个包含文件信息的结构,这些信息包括:缓冲区的位置、缓冲区中当前字符的位置、文件的读或写状态、是否出错或是否已经到达文件结尾等等。用户不必关心这些细节,因为<stdio.h>中已经定义了一个包含这些信息的结构FILE。

fopen 的第一个参数是一个字符串,它包含文件名。第二个参数是访问模式,也是一个字符串,用于指定文件的使用方式。允许的模式包括:读(“r”)、写(“w”)及追加(“a”)。某些系统还区分文本文件和二进制文件,对后者的访问需要在模式字符串中增加字符“b”。
如果打开一个不存在的文件用于写或追加,该文件将被创建(如果可能的话)。当以写方式打开一个已存在的文件时,该文件原来的内容将被覆盖。但是,如果以追加方式打开一个文件,则该文件原来的内容将保留不变。读一个不存在的文件会导致错误,其它一些操作也可能导致错误,比如试图读取一个无读取权限的文件。如果发生错误,fopen将返回NULL。

文件读写

int getc(FILE *fp)   //getc 函数返回fp 指向的输入流中的下一个字符
int putc(int c, FILE *fp)    //该函数将字符c写入到fp指向的文件中,并返回写入的字符。

启动一个C 语言程序时,操作系统环境负责打开3 个文件,并将这3 个文件的指针提供给该程序。这3 个文件分别是标准输入、标准输出和标准错误,相应的文件指针分别为stdin、stdout 和stderr,它们在<stdio.h>中声明。

  • 文件的格式化输入或输出
int fscanf(FILE *fp, char *format, ...)
int fprintf(FILE *fp, char *format, ...)
  • 文件关闭
int fclose(FILE *fp)

执行和fopen 相反的操作,它断开由fopen 函数建立的文件指针和外部名之间的连接,并释放文件指针以供其它文件使用。

错误处理:stderr和exit

将其出错信息写到标准错误文件上。

  1. 另一个输出流以与stdin和stdout相同的方式分派给程序,即stderr。即使对标准输出进行了重定向,写到stderr中的输出通常也会显示在屏幕上。
  2. exit,当该函数被调用时,它将终止调用程序的执行。任何调用该程序的进程都可以获取exit的参数值,因此,可通过另一个将该程序作为子进程的程序来测试该程序的执行是否成功。按照惯例,返回值0 表示一切正常,而非0 返回值通常表示出现了异常情况。exit为每个已打开的输出文件调用fclose函数,以将缓冲区中的所有输出写到相应的文件中。
int ferror(FILE *fp)   //如果流fp中出现错误,则函数ferror返回一个非0 值。
int feof(FILE *fp)  //如果指定的文件到达文件结尾,它将返回一个非0 值。

行输入和行输出

char *fgets(char *line, int maxline, FILE *fp)

fgets 函数从fp 指向的文件中读取下一个输入行(包括换行符),并将它存放在字符数组line中,它最多可读取maxline-1个字符。读取的行将以’\0’结尾保存到数组中。

int fputs(char *line, FILE *fp)

输出函数 fputs将一个字符串(不需要包含换行符)写入到一个文件中。如果发生错误,该函数将返回EOF,否则返回一个非负值。

常用函数

字符串操作函数

头文件<string.h>
在下面的各个函数中,s与t为char *类型,c与n为int类型。

strcat(s, t)        //将t指向的字符串连接到s指向的字符串的末尾
strncat(s, t, n)    //将 t指向的字符串中前n个字符连接到s指向的字符串的末尾
strcmp(s, t)        //根据s 指向的字符串小于(s<t)、等于(s==t)或大于(s>t)t指向的字符串的不同情况,分别返回负整数、0或正整数
strncmp(s, t, n)    //同 strcmp相同,但只在前n个字符中比较
strcpy(s, t)        //将t指向的字符串复制到s指向的位置
strncpy(s, t, n)    //将 t指向的字符串中前n个字符复制到s指向的位置
strlen(s)           //返回s指向的字符串的长度
strchr(s, c)        //在s指向的字符串中查找c,若找到,则返回指向它第一次出现的位置的指针,否则返回NULL
strrchr(s, c)       //在s指向的字符串中查找c,若找到,则返回指向它最后一次出现的位置的指针,否则返回NULL

字符类别测试和转换函数

头文件<ctype.h>中定义了一些用于字符测试和转换的函数。
c 是一个可表示为unsigned char类型或EOF的int 对象。该函数的返回值类型为int。

isalpha(c) //若c是字母,则返回一个非0 值,否则返回0
isupper(c) //若c是大写字母,则返回一个非0值,否则返回0
islower(c) //若c是小写字母,则返回一个非0值,否则返回0
isdigit(c) //若c是数字,则返回一个非0 值,否则返回0
isalnum(c) //若isalpha(c)或isdigit(c),则返回一个非0值,否则返回0
isspace(c) //若c是空格、横向制表符、换行符、回车符,换页符或纵向制表符,则返回一个非0 值
toupper(c) //返回c的大写形式
tolower(c) //返回c的小写形式

存储管理函数

函数 malloc和calloc用于动态地分配存储块。

void *malloc(size_t n)  //当分配成功时,它返回一个指针,设指针指向n 字节长度的未初始化的存储空间,否则返回NULL。
void *calloc(size_t n, size_t size)   //当分配成功时,它返回一个指针,该指针指向的空闲空间足以容纳由n 个指定长度的对象组成的数组,否则返回NULL。
  • 释放指针空间
free(p)

free§函数释放p 指向的存储空间,其中,p 是此前通过调用malloc 或calloc 函数得到的指针。存储空间的释放顺序没有什么限制,但是,如果释放一个不是通过调用malloc或calloc函数得到的指针所指向的存储空间,将是一个很严重的错误。

数学函数

头文件<math.h>中声明了20 多个数学函数。
每个函数带有一个或两个double类型的参数,并返回一个double类型的值。

sin(x)         //x 的正弦函数,其中x 用弧度表示
cos(x)         // x 的余弦函数,其中x 用弧度表示
atan2(y, x)    // y/x 的反正切函数,其中,x 和y用弧度表示
exp(x)         //指数函数ex
log(x)         // x 的自然对数(以e为底),其中,x>0
log10(x)       //x 的常用对数(以10为底),其中,x>0
pow(x, y)      // 计算xy的值
sqrt(x)        //x 的平方根(x≥0)
fabs(x)        // x 的绝对值

随机数发生器函数

函数 rand()生成介于0 和RAND_MAX之间的伪随机整数序列。其中RAND_MAX是在头文件<stdlib.h>中定义的符号常量。
下面是一种生成大于等于0 但小于1 的随机浮点数的方法:

#define frand() ((double) rand() / (RAND_MAX+1.0))

如果所用的函数库中已经提供了一个生成浮点随机数的函数,那么它可能比上面这个函数具有更好的统计学特性。

函数 srand(unsigned)设置rand 函数的种子数。

其他

  1. ungetc函数
int ungetc(int c, FILE *fp)

该函数将字符c写回到文件fp中。如果执行成功,则返回c,否则返回EOF。

  1. 命令执行函数
    函数 system(char* s)执行包含在字符申s 中的命令,然后继续执行当前程序。
system("date");

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

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

相关文章

vue文件在<template>中使用多个<el-main>报错(已解决)

目录 1.原理 2. 根据你的需求&#xff0c;自定义每个 组件的内容。你可以在 标签内部插入文本、其他组件、样式等。 3. 根据需要添加样式或其他属性到每个 组件。你可以使用 class、style 或其他属性来自定义每个组件的外观和行为。 4.一个可以运行的总代码如下 5.我的一…

VQE音频处理流程

VQE 上行VQE&#xff0c;主要针对MIC采集部分的音频增强 下行VQE&#xff0c;主要针对SPK播放部分的音频增强 附关键词解释 RES RES 模块为重采样&#xff08;Resampler&#xff09;模块。当AI上行或AO下行通路中开启VQE 各功能 模块时&#xff0c;在处理前后各存在一次重采样…

COBOL语言 :一种主要专注于解决业务问题的编程语言

译文&#xff1a; 什么是COBOL? COBOL是一种主要专注于解决业务问题的编程语言。COBOL的完整形式是面向业务的通用语言。它主要用于公司和政府的商业、金融和行政系统。这种语言也被用来解决许多数据处理问题。 它是由CODASYL(数据系统语言会议)开发的。它被用作大型机中的一…

DSL查询文档--查询结果处理

排序 elasticsearch默认是根据相关度算分&#xff08;_score&#xff09;来排序&#xff0c;但是也支持自定义方式对搜索结果排序。可以排序字段类型有&#xff1a;keyword类型、数值类型、地理坐标类型、日期类型等。 普通字段排序 keyword、数值、日期类型排序的语法基本一…

【JAVA】在 Queue 中 poll()和 remove()有什么区别

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 poll() 方法&#xff1a; remove() 方法&#xff1a; 区别总结&#xff1a; 结语 我的其他博客 前言 在Java的Queue接口中&…

初识C语言·内存函数

目录 1 memcpy的使用和模拟实现 2 memmove的使用和模拟实现 3 memset的使用和模拟实现 4 memcmp的使用和模拟实现 1 memcpy的使用和模拟实现 紧接字符串函数&#xff0c;出场的是第一个内存函数memcpy。前面讲的字符串函数是专门干关于字符串的事的&#xff0c;而这个函数…

(十二)EEPROM的补充

文章目录 EEPROM补充篇读EEPROM补充内容写EEPROM补充内容单字节写入多字节拆成单字节写入现象 EEPROM补充篇 读EEPROM补充内容 对于上一篇博文在读EEPROM的时候&#xff0c;提到的DUMMY WRITE&#xff1a; 这里怎么理解呢&#xff1a; 大家看&#xff0c;写EEPROM的逻辑除了…

c++学习笔记-STL案例-演讲比赛管理系统2

目录 功能介绍 代码结构部分 查看一下类图 1.Speaker.h 2.speechManager.h 3.speechManager.cpp 4.演讲比赛流程关系系统.cpp 功能介绍 speechManager.h函数包含演讲比赛流程的所有功能如下&#xff1a; 开始演讲比赛&#xff1a;完成整届比赛的流程&#xff0c;每…

为什么使用双token实现无感刷新用户认证?

单token机制 认证机制&#xff1a;对与单token的认证机制在我们项目中仅使用一个Access Token的访问令牌进行用户身份认证和授权的方案处理。 不足之处&#xff1a; 安全性较低&#xff08;因为只有一个token在客户端和服务器端之间进行传递&#xff0c;一旦Access Token被截…

解决ERROR 24680 --- [ main] o.a.catalina.core.AprLifecycleListener 报错:

1.报错全称&#xff1a; ERROR 24680 --- [ main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.2.32] of the Apache Tomcat Native library is installed, while Tomcat requires version [1.2.34] 2.解决方案&#xff1a; 步骤一 在…

Linux下编写zlg7290驱动(1)

大家好&#xff0c;今天给大家介绍Linux下编写zlg7290驱动(1)&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 在智能仪表中&#xff0c;经常会用到键盘、数码管等外设。因此&…

LLM之RAG理论(五)| 使用知识图谱增强RAG

知识图谱&#xff08;KG&#xff09;或任何图都包括节点和边&#xff0c;其中每个节点表示一个概念&#xff0c;每个边表示一对概念之间的关系。本文介绍一种将任何文本语料库转换为知识图谱的技术&#xff0c;本文演示的知识图谱可以替换其他专业知识图谱。 一、知识图谱 知识…

【PyTorch简介】3.Loading and normalizing datasets 加载和规范化数据集

Loading and normalizing datasets 加载和规范化数据集 文章目录 Loading and normalizing datasets 加载和规范化数据集Datasets & DataLoaders 数据集和数据加载器Loading a Dataset 加载数据集Iterating and Visualizing the Dataset 迭代和可视化数据集Creating a Cust…

深度解析Pytest插件pytest-html

在软件开发中&#xff0c;测试报告是开发者获取测试结果和问题定位的关键工具之一。然而&#xff0c;标准的控制台输出有时难以满足我们对测试报告的需求。幸运的是&#xff0c;Pytest插件 pytest-html 提供了一种简单而强大的方式&#xff0c;可以生成漂亮、可视化的HTML格式测…

Python之Matplotlib绘图调节清晰度

Python之Matplotlib绘图调节清晰度 文章目录 Python之Matplotlib绘图调节清晰度引言解决方案dpi是什么&#xff1f;效果展示总结 引言 使用python中的matplotlib.pyplot绘图的时候&#xff0c;如果将图片显示出来&#xff0c;或者另存为图片&#xff0c;常常会出现清晰度不够的…

如何开启文件共享及其他设备如何获取

1.场景分析 日常生活中&#xff0c;常常会遇到多台电脑共同办公文件却不能共享的问题&#xff0c;频繁的用移动硬盘、U盘等拷贝很是繁琐&#xff0c;鉴于此&#xff0c;可以在同一内网环境下设置共享文件夹&#xff0c;减少不必要的文件拷贝工作&#xff0c;提升工作效率。废话…

什么是信噪比

大家好&#xff0c;今天给大家介绍什么是信噪比&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 “信噪比”是电子技术中经常用到的一个词组&#xff0c;知道它的确切含义有一定意…

[含完整代码]Linux使用.sh脚本自动部署(启动|停止|状态|日志)项目[超详细]

前言&#xff1a; 个人博客&#xff1a;www.wdcdbd.com 我们在linux部署.jar项目时&#xff0c;都需要通过java -jar的形式来部署&#xff0c;每次都要手动停止&#xff0c;部署&#xff0c;这样用起来会很麻烦。所以&#xff0c;这篇文章就是自己通过.sh脚本一键启动&#xf…

工作压力测试

每个职场人都会遇到工作压力&#xff0c;在企业人力资源管理的角度来看&#xff0c;没有工作压力是人力资源的低效&#xff0c;适当的工作压力可以促使员工不断进取&#xff0c;然而每个人的抗压能力是不同的&#xff0c;同样的工作量和工作难度&#xff0c;不同的人在面对相同…

实战之-Redis代替session实现用户登录

一、设计key的结构 首先我们要思考一下利用redis来存储数据&#xff0c;那么到底使用哪种结构呢&#xff1f;由于存入的数据比较简单&#xff0c;我们可以考虑使用String&#xff0c;或者是使用哈希&#xff0c;如下图&#xff0c;如果使用String&#xff0c;注意他的value&…