当前位置: 首页 > 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…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...