当前位置: 首页 > news >正文

C复习-输入输出函数+流

参考: 里科《C和指针》


perror

定义在stdio.h中。当一个库函数失败时,库函数会在一个外部整型变量errno(在errno.h中定义)中保存错误代码,然后传递给用户程序,此时使用perror,会在打印msg后再打印出一条用于解释errno当前错误代码的信息。如果库函数成功运行,errno的值不会被修改,所以只有当运行失败时,检查errno的值才有意义。

// 如果msg不是NULL且指向一个非空字符串,perror会打印msg,后跟一个分号和一个空格
// 再跟errno对应的信息
void perror(char const *msg);

exit

原型在stdlib.h。status返回给操作系统,预定义符号EXIT_SUCCESS和EXIT_FAILURE分别提示成功和失败。通常在调用perrno后调用exit终止。

void exit( int status );

标准I/O函数库

fflush迫使缓冲区的数据立即写入,不管它是否已满。

流分为文本流和二进制流。文本流在不同系统中可能有不同的最大长度和文本行结束方式(比如MS-DOS是\r\n,Unix是\n)。二进制流适合非文本数据,或者不希望I/O函数修改文本文件的行末字符时。

stdio.h包含FILE结构的声明,它用来访问一个流。如果同时激活了几个流,每个流都有一个相应的FILE与之关联。为了在流上执行操作,必须调用合适的函数,并传递一个FILE参数。

对于每个ANSI C程序,运行时,系统必须提供至少三个流:标准输入(stdin),标准输出(stdout)和标准错误(stderr),他们都是一个指向FILE结构的指针,标准输入是缺省的输入来源,比如键盘;标准输出是缺省的输出设置,比如终端。可以进行重定向,比如下面是执行program时,输入使用data,输出保存到answer

$program < data > answer

FOPEN_MAX:指一个程序最多同时打开几个文件。与编译器有关,> = 8

FILENAME_MAX:指文件名最大长度

输入/输出函数家族

家族名目的可用于所有的流只用于stdin和stdout内存中的字符串
getchar字符输入fgetc getcgetchar
putchar字符输出fputc putcputchar
gets文本行输入fgetsgets
puts文本行输出fputsputs
scanf格式化输入fscanfscanfsscanf
printf格式化输出fprintfprintfsprintf

①对指针使用下标引用或者间接访问操作从内存中获得一个字符或写出一个字符

②使用strcpy从内存读取文本行或向内存写出文本行

打开流

写入和添加的区别在于,如果原本存在文件,那么写入会先清空内容,添加则不会。数据只能从文件的尾部写入。

fopen执行成功,返回一个指向FILE结构的指针;如果失败,返回NULL,errno会解释原因。

需要始终检查fopen的返回值

FILE *fopen( char const *name, char const *mode );FILE *input;
input = fopen("data3", "r");
if (input == NULL) {perror("data3");exit(EXIT_FAILURE); // data3: No such file or directory
}
读取(要求原先已经存在)写入(如果原来不存在创建;如果原来存在,删除内容)添加
文本rwa
二进制rbwbab

mode中a+表示改文件打开用于更新,允许读和写,但如果已经读入了一些数据,那么在写数据前,必须先定位;当已经写了一些数据,又想读时,需要调用fflush或者某个文件定位函数。

freopen

stream可以是一个先前从fopen返回的流,也可以是stdin/stdout/stderr。freopen首先试图关闭stream,然后用指定的文件和模式重新打开这个流,如果失败,返回NULL,成功则返回stream。

FILE *freopen( char const *filename, char const *mode, FILE *stream );

关闭流

fclose在文件关闭前会刷新缓冲区,成功的话返回0,否则返回EOF。

fclose也是可能失败的,如果操作成功和操作失败需要执行不同的行为,那么需要检查fclose的结果。

int fclose( FILE *f );

字符I/O

字符输入是由getchar函数家族执行的,如果读到了就返回,否则返回EOF。(返回int是因为如果返回字符的话,256个字符中需要有一个指定为EOF,那如果这个字符出现在文字内部,读取就会中断)

int fgetc( FILE *stream ); // 只能作为函数使用
int getc( FILE *stream ); // 是宏,所以stream不能放表达式,因为可能有副作用
int getchar( void ); // 始终从标准输入读取

字符输出是由putchar函数家族执行的,如果character放的是一个’abc’这样的字符串,那么使用哪个字符是不一定的,由编译器决定。如果函数失败返回EOF(比如stream关闭了)。

int fputc( int character, FILE *stream ); // 是真正的函数
int putc( int character, FILE *stream );
int putchar( int character ); // 始终放到标准输出

fgetc和fputc是真正的函数,getc、putc、getchar、putchar都是#define定义的宏,不过实际操作中,程序长度和执行速度都差别不大。

使用ungetc可以把一个先前读入的字符返回到流中,后续可以被重新读入。每个流都允许至少一个字符被退回,如果允许退回多个,再读取时的顺序是退回时的反序。与一个流相关的外部存储不受ungetc的影响。

退回和流当前的位置有关,如果用了fseek、fsetpos或rewind改变了流的位置,所有退回的字符会被丢弃。

int ungetc( int character, FILE *stream );

比如从标准输入读取一段字符(如78xxs),只读取数字并转化为整数

#include <stdio.h>
#include <ctype.h>int
read_int() {int value;int ch;value = 0;// 遇到数字停下while( ( ch = getchar() ) != EOF && isdigit( ch ) ) {value *= 10;value += ch - '0';}// 不是数字就退回ungetc( ch, stdin );return value;
}

未格式化的行I/O

只是简单读取或写入字符串,不做形式转换。gets和puts家族用于操作字符串。

char *fgets( char *buffer, int buffer_szie, FILE *stream );
char *gets( char *buffer ); //  允许兼容;不会在buffer中存储结尾换行符
// gets不知道缓冲区长度,所以长行放入短缓冲区,会破坏内存,但是声明巨大缓冲区也可能有
// 更长的行,所以最好不用int fputs( char const *buffer, FILE *stream );
int puts( char const *buffer ); // 允许兼容,会向输出添加换行符

fgets从指定的流读取字符并复制到buffer中,当读到一个换行符并存储到buffer后就停止读取。如果buffer内存储的字符数达到buffer_size-1个时,也停止读取,当下一次调用fgets时,会从流的下一个字符开始读取。在任何情况下,一个NUL字节会被添加到buffer所存储数据的末尾,使之成为一个字符串。如果在任何字符读取前就到达了文件尾,缓冲区就不需要做更改,所以fgets返回NULL;否则返回指向buffer的指针。

buffer_size是程序员要检查的,因为缓冲区溢出不会报错,如下例。

char myStr[3];
char* ptr = myStr;
// 这里虽然不会报错,但是编译器会有warning缓冲区溢出
ptr= fgets(myStr, 4, stdin);
printf("string is:\n");
while (*ptr != '\0') {printf("%c", *ptr);ptr++;
}
// 实际上myStr只能存1个非\n的字符,因为先存一个字符,然后存换行符,此时就停止读取了

传递给fputs的buffer必须包含一个字符串(以NUL结尾),写入是逐字写入,换行符也会被写入。如果写入时出现错误,返回EOF,否则返回一个非负值。

// 其实这个定义主要影响行的计数,因为不论大小都会被正常写出到另一个文件
// 但是如果缓冲区比较小,fputs的次数就比较多,那只能通过每行中的\n数目计算
#define MAX_LINE_LENGTH 1024/*
** 从一个文件向另一个文件复制行
*/
void
copylines( FILE *input, FILE *output)
{char buffer[MAX_LINE_LENGTH];while ( fgets(buffer, MAX_LINE_LENGTH, input) != NULL )fputs( buffer, output );
}

格式化的I/O

scanf家族

…表示可变长度的指针列表,从输入转换来的值,逐个存储到这些指针参数所指向的内存位置(所以scanf的参数前要加&,因为传的是指针)。

当格式化字符串到达末尾或者读取的输入不匹配格式时,输入停止,此时返回输入值的数目。如果在任何输入值被转换前,文件已经到达尾部,则返回EOF。

函数不会检查格式和指针参数是否匹配。

int fscanf(FILE *stream, char const *format, ... );
int scanf( char const *format, ... ); // 从stdin读取
int sscanf( char const *string, char const *format, ... ); // 从string中读取

format格式

%[*][width][modifiers]格式字符

1)*表示不存储转换后的值,直接丢弃(用来跳过不需要的输入字符)

2)width指定当前读取的最大字符数,如果不给出,则连续读入直到遇到下一个空白字符

3)modifiers:如果不是int,要用

格式字符hlL
d,i,nshortlong
o,u,xunsigned shortunsigned long
e,f,gdoublelong double

scanf的格式字符

代码参数含义举例
cchar*读取和存储单个字符,前导空白字符不会跳过。字符后面不会添加一个NUL,参数必须指向一个足够大的字符数组
i dint *d是解释为十进制,i可以读入8、10、16进制scanf(“%i”, &i); // 输入0xA
printf(“%d”, i); // 输出10
u o x Xunsigned *按无符号存储,uox分别解释为10、8、16进制,X和x同义
e f g E F Gfloat *小数点非必需,可以有前置+/-,可以有后置e/E。
schar *遇到空白时输入即停止,字符串后面自动加上NUL
[xxx]char *匹配[]内的字符,如果不匹配即停止,字符串后自动加NUL%[abc]表示接受输入abc中任何一个字符;%[^abc]指非abc,]也可以用,但必须放第一位,如果是需要某个范围,如%[a-z]因编译器而定
pvoid *内存地址
nint *%n转换的字符不计算在scanf的返回值内
%与输入中的一个%匹配,该%将被丢弃

printf家族

返回值是实际打印或存储的字符数。

int fprintf( FILE *stream, char const *format, ... ); // 输出到stream
int printf( char const *format, ... );
// 不知道buffer的长度,但可以通过限制生成字符串的宽度来使buffer够大
int sprintf( char *buffer, char const *format, ... ); // 转换后存到buffer中

format格式

%[flags][width][.precision][length]specifier

flags

标志含义
-值左对齐,默认是右对齐
0值右对齐时,缺省情况下使用空格填充左边,0表示用0填充;如果diuox给出了精度,0会被忽略
+如果某个有符号值是非负的,会加一个+。缺省,不显示+
空格只用于转换有符号值的代码,当值是非负,前面会加一个空格。空格与+是互斥的,如果同时给出,应用+
#选择某些代码的另一种转换形式

width是十进制整数,用于指定将出现在结果中的最小字符数。对于diuoxX,如果经过精度转换后,值的长度还是小于宽度,会在前面插入0,如果值是0,精度也是0,转换后是空的,没有数字

int i = 0;
printf("*%.0d*", i); // 输出**

如果用于表示字段宽度和(或)精度的十进制整数由*代替,那么printf的下一个参数必须是整数,且能提供宽度和(或)精度。

未指定精度时,默认为1,如果指定时不带值,则假定为0

printf的格式字符

代码参数含义举例
cint参数被裁剪为unsigned char并作为字符打印
d,iintd:参数作为十进制整数打印,如果给出了精度但值的位数少于精度位数,前面用0填充(-不占长度);i是8和16进制
u,o,x,Xunsigned int跟scanf的一样含义,X是十六进制,用A~F
e,Edouble打印指数形式。小数点后面的位数由精度决定,缺省是66.023000e23是用e,大写E则打印大写的
fdouble打印浮点形式,精度决定小数点后位数,缺省6
g,Gdouble参数以%f或%e(G是%E)形式打印。当指数大于等于-4但小于精度字段用%f,否则用指数格式这个不太对,比如double i = 1,按%g输出是1,不同于%f和%e。参考后面的例子,更像是以更短的形式输出,如果是整数就输出整数。
schar *打印一个字符串。如果字符串超过宽度,完全打印精度指定最多字符数
pvoid *打印指针地址
nint *不产生输出
%打印一个%

例子

int i = 10;
printf("%.3d", i); // 010
%.4d // -12 -> -0012
%6.4d // 1 -> **0001, *表示空格
%6.4d // -12 -> *-0012           

printf格式代码修改符

修改符号用于表示参数是
hd,i,u,o,x,X一个short型整数
hn一个指向short型整数的指针
ld,i,u,o,x,Xlong型整数
ln指向long型整数的指针
Le,E,f,gGlong double

#的转换

用于含义举例
o保证产生的值以0开头
x,X在非0值前加0x前缀,%X则是0X
e,E,f确保结果始终包含一个小数点,即使它后面没有数字
g,G确保有小数点。后缀0不会去除double i = 0.230e5;printf(“%#g”, i); // 23000.0

实例

其中*表示空格

格式代码1.01.0001234512345.67896.023e23
%f1.0000000.0100000.0012312345.678900602299999999999975882752.000000
%10.2f******1.00******0.01******0.00**12345.68602299999999999975882752.00
%e1.000000e+001.000000e-021.234500e-041.234568e+046.023000e+23
%.4e1.0000e+001.0000e-021.2345e-041.2346e+046.0230e+23
%g10.010.0001234512345.76.023e+23

二进制I/O

buffer是一个指向保存数据的内存位置的指针,size是buffer中每个元素的字节数,count是读取或写入的元素数,stream是读取或写入的流。返回值是实际读取或写入的元素数目。

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
size_t fwrite( void *buffer, size_t size, size_t count, FILE *stream );

刷新和定位函数

需要立刻把输出缓冲区的数据进行物理写入时,用fflush。例如,调用fflush保证调试信息实际打印出来,而不是保存在buffer中等候打印。

int fflush( FILE *stream );

ftell返回流的当前位置,在二进制流中,表示的是当前位置距离文件起始位置之间的字节数;在文本流中,不一定表示字符数(因为有的os会转换行末字符),但是ftell的返回值总可以用在fseek中。

long ftell( FILE *stream );
int fseek( FILE *stream, long offset, int from );

fseek的from参数说明

from含义说明
SEEK_SET从流的起始位置起offset个字节,offset≥0需要提前对同一个流调用ftell,用那个值做offset
SEEK_CUR从流的当前位置起offset个字节,offset可正可负文本流中from是cur或者end,offset必须是0
SEEK_END从流的尾部位置起offset个字节,offset可正可负二进制流中可能不被支持,应避免

用fseek改变一个流的位置可能有副作用:

  1. 行末只是字符被清除
  2. 如果在fseek前使用ungetc把一个字符返回到流中,那么这个被退回的字符会被丢弃
  3. 定位允许从写入模式切换到读取模式,或者回到打开的流以便更新
void rewind( FILE *stream ); // 将读/写指针设置回指定流的起始位置,并清除流的错误提示标志
// fpos_t表示文件位置,非标准定义,安全的用法是fgetpos获取值,然后传递给fsetpos
int fgetpos( FILE *stream, fpos_t *position ); // 替代ftell
int fsetpos( FILE *stream, fpos_t const *position ); // 替代fseek

从一个文件读取一个特定的记录:

#include <stdio.h>
#include "student_info.h"int
read_random_record( FILE *f, size_t rec_number, StudentInfo *buffer) 
{fseek(f, (long)rec_number * sizeof( StudentInfo ), SEEK_SET );return fread( buffer, sizeof( StudentInfo ), 1, f );
}

改变缓冲方式

setbuf设置了另一个数组buf对流进行缓冲,这个数组的长度必须为BUFSIZ(stdio.h中定义)。为一个流自行制定缓冲区可以防止I/O函数库为它动态分配一个缓冲区。如果buf==NULL,setbuf回关闭流的所有缓冲方式

void setbuf( FILE *stream, char *buf );
// mode指定缓冲类型:_IOFBF 完全缓冲的流,_IONBF 不缓冲的流,_IOLBF 行缓冲流
// 行缓冲指当换行符写入缓冲区时,缓冲区刷新
// if buf==NULL, size必须是0. 最好用长度为BUFSIZ的字符数组作缓冲区,或者是其整数倍
int setvbuf( FILE *stream, char *buf, int mode, size_t size ); // 更通用

流错误函数

如果流处于文件尾,feof返回真,这个状态可以通过对流执行fseek、rewind或fsetpos来清除。ferror是报告流的错误状态,如果出现任何读/写错误函数就返回真。clearerr是重置指定流的错误标志。

int feof( FILE *stream );
int ferror( FILE *stream );
void clearerr( FILE *stream );

临时文件

tmpfile可以创建一个文件,当文件被关闭或者程序终止时这个文件回自动删除,打开方式是wb+,因此可以用于二进制和文本数据。如果需要以其他模式打开或者由其他程序读取,不能用tmpfile,只能用fopen+remove。

临时文件的名字可以用tmpnam创建,如果name==NULL,则返回值是一个指向静态数组的指针,该数组包含了被创建的文件名;否则就是name。只要调用次数不超过TMP_MAX次,tmpnam每次调用时都能产生一个新名字

FILE *tmpfile( void );
char *tmpnam( char *name );

文件的删除和重命名

如果remove被调用时文件处于打开状态,其结果取决于编译器。rename如果新名字跟其他文件重名,其结果也取决于编译器。

int remove( char const *filename );
int rename( char const *oldname, char const *newname );

相关文章:

C复习-输入输出函数+流

参考&#xff1a; 里科《C和指针》 perror 定义在stdio.h中。当一个库函数失败时&#xff0c;库函数会在一个外部整型变量errno&#xff08;在errno.h中定义&#xff09;中保存错误代码&#xff0c;然后传递给用户程序&#xff0c;此时使用perror&#xff0c;会在打印msg后再打…...

duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113

duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113 搭建dg过程中&#xff0c;发现有一个数据文件在复制过程中没有复制过来&#xff0c;在备库数据文件目录找不到这个数据文件 处理方法&#xff1a; 第一步&#xff1a;主库备份86#数据文件 C:\Users\Admi…...

golang 解析oracle 数据文件头

package mainimport ("encoding/binary""fmt""io""os" ) // Powered by 黄林杰 15658655447 // Usered for parser oracle datafile header block 1 .... // oracle 数据文件头块解析 // KCBlockStruct represents the structure of t…...

van-popup滑动卡顿并且在有时候在ios上经常性滑动卡顿的情况

解决”pc端页面可以滚动&#xff0c;移动端手势无法滚动“问题的一次经历 - 掘金 <van-popup v-model"studentclassShow" :lock-scroll"false" position"bottom" style"z-index: 3000" :style"{ height: 55% }"><d…...

YOLOv7独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv7独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…...

ubuntu20.04中编译zlib1.2.11(源码编译)

1. 安装cmake-gui 2. 下载并解压zlib-1.2.11&#xff0c;在解压得到的文件夹内部创建一个“build”文件夹。 3. 打开cmake-gui&#xff0c;配置zlib1.2.11的configure文件&#xff08;主要编辑build路径&#xff0c;安装路径&#xff0c;以及其他依赖选项&#xff09;&#x…...

计算机毕业设计选题推荐-高校后勤报修微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

如何零基础自学AI人工智能

随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;越来越多的有志之士被其强大的潜力所吸引&#xff0c;希望投身其中。然而&#xff0c;对于许多零基础的人来说&#xff0c;如何入门AI成了一个难题。本文将为你提供一份详尽的自学AI人工智能的攻略&#xff0c;帮…...

pm2使用

常用命令 pm2 delete/stop/restart/start/list/info/monit/log...

在Ubuntu或linux中为coreutils工具包的cp和mv命令添加进度条

1、查看当前最新的coreutils版本&#xff1a; http://ftp.gnu.org/gnu/coreutils/ 2、安装coreutils过程 # wget http://ftp.gnu.org/gnu/coreutils/coreutils-9.4.tar.xz # tar -xJf coreutils-9.4.tar.xz # cd coreutils-9.4/ 对照上面的&#xff0c;下载对应coreutils版本…...

力扣-58. 最后一个单词的长度

int lengthOfLastWord(char* s) {char* temp s;char* ret s;int count 0;/*返回的长度*/while (*temp){/*只记录空格后是字母的地址*/if ((*temp ) && (*(temp 1) ! \0) && (*(temp 1) ! )){ret temp 1;}temp;}while (*ret){if (isalpha(*ret) ! 0)…...

快递鸟荣获全球电子商务创业创新大赛总决赛一等奖

日前&#xff0c;以“开放、连接、协同、赋能”为主题&#xff0c;由商务部中国国际电子商务中心指导&#xff0c;浙江省商务厅、中共省委组织部、中共省委宣传部、中共省委网信办、省发展和改革委、省教育厅、省科技厅、省财政厅、省人力社保厅、团省委主办&#xff0c;湖州市…...

阶段七-Day02-SpringMVC

一、Restful请求格式 1. 介绍 Rest(Representational State Transfer&#xff1a;表现层状态转移)是一种软件架构风格&#xff0c;其核心是面向资源的一种设计。何为面向资源&#xff0c;意思是网络上的所有事物都可以抽象为资源&#xff0c;而每个资源都有唯一的资源标识&…...

YOLOv5独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…...

【深度学习】pytorch快速得到mobilenet_v2 pth 和onnx

在linux执行这个程序&#xff1a; import torch import torch.onnx from torchvision import transforms, models from PIL import Image import os# Load MobileNetV2 model model models.mobilenet_v2(pretrainedTrue) model.eval()# Download an example image from the P…...

高防CDN安全防护系统在业务方面的应用

在当今数字化的时代&#xff0c;网络安全问题日益严峻&#xff0c;保护网站和数据免受攻击变得至关重要。CDN安全防护系统作为一种有效的解决方案&#xff0c;受到了广泛关注。小德将向您介绍CDN安全防护系统的原理、应用场景以及使用方法&#xff0c;助您更好地保障网络安全。…...

opencv(3):控制鼠标,创建 tackbar控件

文章目录 控制鼠标相关APIsetMouseCallbackcallback TrackBar 控件cv2.createTrackbarcv2.getTrackbarPos&#xff1a; 控制鼠标相关API setMouseCallback(winname, callback, userdata)callback(event, x, y, flags, userdata) setMouseCallback 在 OpenCV 中&#xff0c;s…...

UE4动作游戏实例RPG Action解析二:GAS系统播放武器绑定的技能,以及GE效果

一、GAS系统播放武器技能 官方实例激活技能通过装备系统数据激活,我先用武器数据资产直接激活 官方实例蒙太奇播放是自定义的AbilityTask,我先用更简单的方法实现效果 1.1、技能系统必要步骤: 1.1.1 插件启用AbilitySystem 1.1.2 PlayerCharacter绑定技能组件AbilitySy…...

做完这些_成为机器学习方面的专家

简单记个帖子, 用来记录学习机器学习的路线图 1. 数学分析, 高等代数, 概率论这三大件不多说, 基础中的基础. 2. 对于编程工具, b站上500集的python教程---python面向对象编程五部曲(从零到就业). 3. 对于机器学习的理论板块, 推荐b站up主---啥都会一点的研究生, 里面有一个吴恩…...

kubernetes|云原生| 如何优雅的重启和更新pod---pod生命周期管理实务

前言&#xff1a; kubernetes的管理维护的复杂性体现在了方方面面&#xff0c;例如&#xff0c;&#xff50;&#xff4f;&#xff44;的管理&#xff0c;服务的管理&#xff0c;用户的管理&#xff08;&#xff32;&#xff22;&#xff21;&#xff23;&#xff09;&#xf…...

【总结】坐标变换和过渡矩阵(易忘记)

xCy&#xff0c;此为x到y的坐标变换。 [β1,β2,…,βn] [α1,α2,…αn]C&#xff0c;此为基α到基β的过渡矩阵。 这个概念经常忘记。。。alpha到beta看来就是alpha后面加一个过渡矩阵了&#xff0c;很直观。坐标变换就是根据过渡矩阵和基本形式推一推得到吧&#xff0c;记…...

第十一周任务总结

本周任务总结 本周物联网方面主要继续进行网关的二次开发与规则引擎实现设备联动的实现 非物联网方面主要复习了docker的使用与算法的学习 1.网关的二次开发&#xff0c;本周将实现debug调试输出的文件下载到了网关&#xff0c;但网关出了问题无法连接&#xff0c;最终跟客服…...

Java Web——JavaScript基础

1. 引入方式 JavaScript程序不能独立运行&#xff0c;它需要被嵌入HTML中&#xff0c;然后浏览器才能执行 JavaScript 代码。 通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有3种方式&#xff1a; 1.1. 内嵌式(嵌入式) 直接写在html文件里&#xff0c;用s…...

Vue3 toRaw 和 markRaw

一、toRaw 我们可以使用ref 和 reactive 将普通对象类型的数据变为响应式的数据。 我们可以使用toRaw 将reactive 对象的数据变为一般对象类型的数据。 使用toRaw 需要先进行引入&#xff1a; import { toRaw } from vue; 语法格式&#xff1a; const xxx toRaw(数据) set…...

麒麟信安助力长沙市就业与社保数据服务中心政务系统向自主创新演进

应用场景 长沙市就业与社保数据服务中心依托长沙市“政务云”的公共基础资源和相应的支撑能力&#xff0c;围绕社保、就业、人事人才、劳动关系等人社全量业务服务&#xff0c;力求建立以“智慧服务、智慧监管、智慧决策”为核心的“智慧人社”综合服务平台&#xff0c;实现人…...

【LeetCode刷题-双指针】--16.最接近的三数之和

16.最接近的三数之和 方法&#xff1a;排序双指针 class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int ans nums[0] nums[1] nums[2];for(int i 0;i<nums.length;i){int start i1,end nums.length - 1;while(start < en…...

Mac 安装 protobuf 和Android Studio 使用

1. 安装,执行命令 brew install protoc 2. Mac 错误提示&#xff1a;zsh: command not found: brew解决方法 解决方法&#xff1a;mac 安装homebrew&#xff0c; 用以下命令安装&#xff0c;序列号选择中科大&#xff08;1&#xff09;或 阿里云 /bin/zsh -c "$(curl…...

MongoDB入门级别教程全(Windows版,保姆级教程)

下载mongodb 进入官网&#xff1a; Download MongoDB Community Server | MongoDB 选择msi&#xff0c;Windows版本 下载完后直接双击&#xff1a; 选择complete 这里建议改地方&#xff1a; 我这里直接改成d盘&#xff1a;work目录下面&#xff1a; 点击next&#xff1a; 因…...

基于机器学习的居民消费影响因子分析预测

项目视频讲解: 基于机器学习的居民消费影响因子分析预测_哔哩哔哩_bilibili 主要工作内容: 完整代码: import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import missingno as msno import warnings warnings.filterwarnin…...

Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)

接到一个需求是开发下海康的球机,控制云台,给到我的是一个开发手册,当然了是海康的私有协议 ISAPI开发手册https://download.csdn.net/download/qq_37059136/88547425关于开发这块读文档就可以理解了,海康使用的是摘要认证,当然了海康已经给出使用范例 通过libcurl就可以直接连…...

srs webrtc推拉流环境搭建(公网)

本地环境搭建 官方代码https://github.com/ossrs/srs 拉取代码&#xff1a; git clone https://github.com/ossrs/srs.gitcd ./configure make ./objs/srs -c conf/https.rtc.confsrs在公网上&#xff0c;由于srs是lite-ice端&#xff0c;导致他不会主动到srs获取自己的公网i…...

【Flutter】设计原则(2)深入解析 SOLID 原则的应用

【Flutter】设计原则(2)深入解析 SOLID 原则的应用 文章目录 一、前言二、SOLID原则三、在 Flutter 中应用单一职责原则1. 专注单一功能的 Widget2. 提高代码可维护性四、在 Flutter 中应用开闭原则1. 利用多态和基类实现可扩展的 Widget2. 增强应用的可扩展性和灵活性五、在…...

python爬虫概述及简单实践:获取豆瓣电影排行榜

目录 前言 Python爬虫概述 简单实践 - 获取豆瓣电影排行榜 1. 分析目标网页 2. 获取页面内容 3. 解析页面 4. 数据存储 5. 使用代理IP 总结 前言 Python爬虫是指通过程序自动化地对互联网上的信息进行抓取和分析的一种技术。Python作为一门易于学习且强大的编程语言&…...

ts视频文件转为mp4(FFmpeg)

有些视频资源下载下来之后发现是.ts的文件&#xff0c;除了用下载它时用的工具或是浏览器才能看&#xff0c;那有没有将ts文件转换成更加通用视频格式的方法。 几乎万能的音视频工具--ffmpeg登场 安装和环境配置可看这篇博客&#xff1a;FFmpeg指令行打开usb摄像头&#xff0…...

2023年咸阳市《网络建设与运维》赛题解析------四、安全配置

安全配置 说明:IP地址按照题目给定的顺序用“ip/mask”表示,IPv4 any地址用0.0.0.0/0,IPv6 any地址用::/0,禁止用地址条目,否则按零分处理。 1.FW1配置IPv4 nat,实现集团产品1段IPv4访问Internet IPv4,转换ip/mask为200.200.200.16/28,保证每一个源IP产生的所有会话将…...

什么是java枚举?为什么要用java枚举?

什么是java枚举&#xff1f; 原始的接口定义常量 public interface IConstants {String MON "Mon";String TUE "Tue";String WED "Wed";String THU "Thu";String FRI "Fri";String SAT "Sat";String SUN …...

USB复合设备构建CDC+HID鼠标键盘套装

最近需要做一个小工具&#xff0c;要用到USB CDCHID设备。又重新研究了一下USB协议和STM32的USB驱动库&#xff0c;也踩了不少坑&#xff0c;因此把代码修改过程记录一下。 开发环境&#xff1a; ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cub…...

准备篇(四)HTTP 基本原理

URI 和 URLURIURLURI vs URLHTTP 和 HTTPS超文本HTTPHTTP 请求与响应HTTPS你是否想过,在浏览器中敲入 URL 到 获取网页内容 之间发生了什么? 了解这些,有助于进一步了解爬虫的基本原理。 URI 和 URL URI(Uniform Resource Identifier),即统一资源标识符;URL(Universa…...

模板初阶笔记分享

有道云笔记...

使用Spring Boot实现大文件断点续传及文件校验

一、简介 随着互联网的快速发展&#xff0c;大文件的传输成为了互联网应用的重要组成部分。然而&#xff0c;由于网络不稳定等因素的影响&#xff0c;大文件的传输经常会出现中断的情况&#xff0c;这时需要重新传输&#xff0c;导致传输效率低下。 为了解决这个问题&#xff…...

读取PDF中指定数据写入EXCEL文件

使用Java读取文件夹中的PDF文件,再读取文件中的指定的字体内容,然后将内容写入到Excel文件中,其中包含一些正则判断,可以忽略,字体以Corbel字体为例。 所需要的maven依赖为: <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel…...

[黑马程序员SpringBoot2]——开发实用篇1

目录&#xff1a; 手工启动热部署自动启动热部署热部署范围配置关闭热部署功能第三方bean属性绑定松散绑定常用计量单位应用bean属性校验进制数据转换规则加载测试专用属性加载测试专用配置测试类中启动web环境发送虚拟请求匹配响应执行状态匹配响应体匹配响应体(json)匹配响应…...

Python------列表 集合 字典 推导式(本文以 集合为主)

推导式&#xff1a; 推导式comprehensions&#xff08;又称解析式&#xff09;&#xff0c;是Python的一种独有特性。推导式是可以从一个数据序列 构建 另一个 新的数据序列&#xff08;一个有规律的列表或控制一个有规律列表&#xff09;的结构体。 共有三种推导&#xff…...

网工内推 | Linux运维,六险二金,最高30K,IE认证优先

01 上海域起 招聘岗位&#xff1a;Linux运维工程师 职责描述&#xff1a; 1.负责游戏产品运维相关的工作&#xff0c;流程文档、技术文档、功能脚本的编写整理 2.负责分析并排除系统、数据库、网络、应用等游戏产品运维中出现的故障及错误 3.负责对游戏产品项目进行线上部署、…...

服务器集群配置LDAP统一认证高可用集群(配置tsl安全链接)-centos9stream-openldap2.6.2

写在前面 因之前集群为centos6&#xff0c;已经很久没升级了&#xff0c;所以这次配置统一用户认证也是伴随系统升级到centos9时一起做的配套升级。新版的openldap配置大致与老版本比较相似&#xff0c;但有些地方配置还是有变化&#xff0c;另外&#xff0c;铺天盖地的帮助文…...

12-1- GAN -简单网络-线性网络

功能 随机噪声→生成器→MINIST图像。 训练方法 0 损失函数:gan的优化目标是一个对抗损失,是二分类问题,用BCELoss 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的…...

Antv/G2 分组柱状图+折线图双轴图表

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,heightdevice-height"><title>分组柱状图折线图双轴图表</title><styl…...

springboot323基于Java的美妆购物网站的设计与实现

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————...

vue项目本地开发完成后部署到服务器后报404

vue项目本地开发完成后部署到服务器后报404是什么原因呢&#xff1f; 一、如何部署 前后端分离开发模式下&#xff0c;前后端是独立布署的&#xff0c;前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道vue项目在构建后&#xff0c;是生成一系…...

Android设计模式--状态模式

真知即所以为行&#xff0c;不行不足谓之知 一&#xff0c;定义 当一个对象的内在状态改变时&#xff0c;允许改变其行为&#xff0c;这个对象看起来像是改变了其类。 这么说可能很难理解&#xff0c;通俗来讲就是当一个对象它有多种状态的时候&#xff0c;把每一种状态的行为…...