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

C 语言的 printf() 函数

概述

printf() 的作用: Print formatted output to the standard output stream.

printf() 的函数原型:

int printf( const char *format, argument1, argument2, ... );

printf() 函数的基本格式:

printf(格式字符串, 待打印项列表);

或者写为:

printf(格式字符串, 待打印项 1, 待打印项 2, ...);

待打印项 1, 待打印项 2 等都是要打印的项, 可以是变量, 常量或者在打印之前可以先进行求值的表达式, 然后打印这个表达式的值.

格式字符串中包含两种不同的信息:

  1. 实际要打印的字符, 即直接打印的字符, 也叫字面字符.
  2. 转换说明.

示意图 1:

示意图 2:

向 printf 或其他没有在函数原型中指明形参类型的函数传递实参时, short 类型实参被转换为 int, float 类型实参被转换为 double.

printf() 格式控制符

printf() 格式控制符的完整形式如下:

%[flag][width][.precision]type

[ ] 表示此处的内容可有可无,是可以省略的。

type 表示输出类型,即基本的转换说明,或称为转换字符。

width 表示最小输出宽度。

flag 表示标记。

precision 表示精度。

除了 type 之外统称为修饰符。

转换说明

整型

int

int 类型, 即基本整型, 通常只有十进制, 转换说明为:

%d

short int

short int 简称为 short, 即短整型. 转换说明要加前缀 h, 即:

%hd

long int

long int 简称为 long, 即长整型. 转换说明要加前缀 l, 即:

%ld

long long int

long long int 简称为 long long, 即长长整型, 是 C99 新增, C90 不支持. 转换说明要加前缀 ll, 即:

%lld

unsigned int

unsigned int 简称 unsigned, 即无符号基本整型.

有三种进制, 即十进制, 八进制, 十六进制.

以八进制和十六进制输出时, 会将符号位视为数值位, 故以八进制或十六进制形式输出整数时只能用于无符号整数.

printf() 不支持以八进制和十六进制形式输出有符号数, 也没有对应的转换说明符.

十进制:

%u

十进制没有前缀, 若加了 # 则结果未定义.

八进制:

显示前缀:%#o(得到前缀 0)
不显示前缀:%o

十六进制:

显示前缀:%#x(得到前缀 0x),%#X(得到前缀 0X)
不显示前缀:%x,%X
使用 x 则十六进制数用 1-9 和 a-f 表示.
使用 X 则十六进制数用 1-9 和 A-F 表示.

程序示例:

#include<stdio.h>
int main(void)
{unsigned int x = 100;printf("dec = %u; octal = %o; hex = %x\n", x, x, x);printf("dec = %u; octal = %o; hex = %X\n", x, x, x);printf("dec = %u; octal = %#o; hex = %#x\n", x, x, x);printf("dec = %u; octal = %#o; hex = %#X\n", x, x, x);return 0;
}

结果:

dec = 100; octal = 144; hex = 64
dec = 100; octal = 144; hex = 64
dec = 100; octal = 0144; hex = 0x64
dec = 100; octal = 0144; hex = 0X64

unsigned short int

unsigned short int 简称 unsigned short, 即无符号短整型, 分三种进制进行打印:

十进制:

%hu

八进制:

显示前缀: %#ho
不显示前缀: %ho

十六进制:

显示前缀: %#hx 或 %#hX
不显示前缀: %hx 或 %hX

unsigned long int

unsigned long int 简称为 unsigned long, 即无符号长整形.

十进制:

%lu

八进制:

显示前缀: %#lo
不显示前缀: %lo

十六进制:

显示前缀: %#lx 或 %#lX
不显示前缀: %lx 或 %lX

unsigned long long int

unsigned long long int 简称为 unsigned long long, 即无符号长长整型.

十进制:

%llu

八进制:

显示前缀: %#llo
不显示前缀: %llo

十六进制:

显示前缀: %#llx 或 %#llX
不显示前缀: %llx 或 %llX

规律:

short, long, long long 就是在 int 的 d 前面加前缀 h, l, ll.
unsigned short, unsigned long, unsigned long long 就是在 unsigned 的 u, o, x/X 前面加前缀 h, l, ll.

转换说明中的字母尽量都用小写,除了表示十六进制的 X(经测试,小写都不会出错,大写可能出错)。

此类前缀称为修饰符.

有符号类型只能以十进制输出 (虽然有符号的正数以十六进制和八进制输出也不会出错, 但只是刚好符号位为 0 而已).

无符号类型可以三种进制 (十进制, 八进制, 十六进制) 输出. 要显示八进制前缀 0 和十六进制前缀 0x 或 0X 时在转换说明的 % 后面加 #.

布尔型

转换说明:

%u

字符型

转换说明:

%c,%d,%o,%x

程序示例:

#include <stdio.h>int main(void) {char c = 'a';printf("%c\t%d\t%o\t%x\n", c, c, c, c); // a       97      141     61return 0;
}

地址

转换说明:

%p

指针之差

两个指针差值的类型为 ptrdiff_t,这是 C99 引入的类型。这是一个底层有符号整数类型。

%td

sizeof 和 strlen() 的返回值类型

这个类型为 size_t,这是 C99 引入的类型。这是一个底层无符号整数类型。

%zd

浮点型

float 和 double

十进制:

%f

指数计数法:

%e
%E

十六进制:

%a
%A

long double

十进制:

%Lf

指数计数法:

%Le

十六进制:

%La

给未在函数原型中显式说明参数类型的函数(如 printf)传递参数时,C 编译器会把 float 类型的值自动转换为 double 类型

%f, %e, %E, %Lf, %Le 都是默认小数点后输出 6 位。其中,%e, %E, %Le 都是默认小数点前输出 1 位。全部都可以四舍五入。

程序示例:

#include<stdio.h>int main(void) {float a = 123.123456789;long double b = 123.123456789L;printf("%f\n", a);printf("%e\n", a);printf("%Lf\n", a);printf("%Le\n", a);return 0;
}

执行结果:

123.123459
1.231235e+02
123.123459
1.231235e+02

程序示例:

#include <stdio.h>int main()
{float f = 3.1415926535f;double d = 3.1415926535;printf("f = %f, d = %f\n", f, d);printf("f = %.8f, d = %.8f\n", f, d);  // f 的值不再精确
}

执行结果:

f = 3.141593, d = 3.141593
f = 3.14159274, d = 3.14159265

%g

根据值的不同, 自动选择 %f 或者 %e 来打印浮点数, %e 格式用于指数小于 -4 或者大于或等于精度时.

%G

根据值的不同, 自动选择 %f 或者 %E 来打印浮点数, %e 格式用于指数小于 -4 或者大于或等于精度时.

修饰符

以上各个百分号后面的字母叫做 转换字符 . 在 转换字符百分号 之间还可以有 修饰符 . 修饰符可以修饰基本的转换说明.

转换说明即由三部分组成: 百分号, 修饰符, 转换字符 .

数字

表示宽度

转换说明中, 小数点前面的数字可以表示待打印项的最小字段宽度, 在指定宽度范围内, 内容右对齐.

如果字段宽度不能容纳待打印的内容, 系统会自动使用刚好合适的宽度.

就是%[flag][width][.precision]type当中的 width 部分.

程序示例 1:

#include<stdio.h>int main(void)
{printf("**********\n");printf("%10s\n", "hello");return 0;
}

结果:

**********hello

程序示例 2:

#include<stdio.h>int main(void)
{printf("**********\n");printf("%10d\n", 30);return 0;
}

结果:

**********30

程序示例 3:

#include<stdio.h>int main(void)
{printf("**********\n");printf("%10s\n", "hello world!");return 0;
}

结果:

**********
hello world!

表示精度

转换说明中, 小数点后面的数字还可以表示浮点数的精度, 即浮点数的小数点后面有几个数字, 可以四舍五入.

就是%[flag][width][.precision]type当中的 precision 部分.

程序示例:

#include<stdio.h>
#include<string.h>int main(void)
{float a = 1235.56789;printf("%e\n", a);    // %e, %f, %Lf 默认小数点后面 6 个数字,可以进行四舍五入printf("%.4e\n", a);  // 明确指定小数点后面 4 个数字,可以进行四舍五入printf("%.4f\n", a);  // 明确指定小数点后面 4 个数字,可以进行四舍五入return 0;
}

结果:

1.235568e+03
1.2356e+03
1235.5679

这种精度表示方式适用于 %e,%E 和 %f.

小数点前面的数字表示字段宽度, 小数点后面的数字表示输出的浮点数的小数点后面的位数.

可以看出, 这里发生了四舍五入.

如果转换说明中, 只是用了小数点, 则说明输出的数字没有小数部分, 即没有小数点以及小数点后面的数字. 也就是说 %.f%.0f 两者效果相同.

在去掉小数部分时依然会发生四舍五入.

程序示例:

#include<stdio.h>
#include<string.h>int main(void)
{float a = 12345.88888;printf("%.f\n", a); // 只有小数点printf("%.0f\n", a); return 0;
}

结果:

12346
12346

可以看出这里发生了四舍五入.

表示待打印字符的最多个数

在转换说明 %s 中, 在小数点后面加数字, 可以表示待打印的字符的最多个数.

程序示例:

#include<stdio.h>
#include<string.h>int main(void)
{char name[20] = "helloworld";printf("%s\n", name);         // 直接输出整个字符串printf("%.5s\n", name);       // 最多输出5个字符printf("********************\n");printf("%10.6s\n", name);     // 输出的字符串最多占用10个位置,最多输出6个字符,默认右对齐printf("%-10.5s\n", name);    // 输出的字符最多占用10个位置,最多输出5个字符,左对齐return 0;
}

结果:

helloworld
hello
********************hellow
hello

表示整数的最少位数

%d 转换说明中, 小数点后面有数字时, 该数字表示待输出的整数最小占用的位数, 如果指定的位数小于数字的真实位数, 则忽视这个位数的要求而直接打印数字, 如果指定的位数大于数字的真实位数, 则数字靠右打印, 左侧用数字 0 补齐要求的位数. 不论哪种情况待打印的数字都是完整输出的.

程序示例:

#include<stdio.h>
#include<string.h>int main(void)
{int a = 12345;// 最小打印四位数字,原数字超过了四位,则直接忽视这个4,打印原始的数字printf("%.4d\n", a);  // 最小打印六位数字,原数字为五位,则打印原始的数字,原始数字靠右,左侧用0补齐六位printf("%.6d\n", a);  return 0;
}

结果:

12345
012345

程序示例:

#include<stdio.h>
#include<string.h>int main(void)
{int a = 12345;printf("**********\n");printf("%10.7d\n", a);  // 指定字段宽度为 10, 至少输出 7 个数字, 不够的用 0 不足位数return 0;
}

结果:

**********0012345

标记

标记有五种: -, +, 空格, #, 0.

可以不使用或者使用多个标记.

就是%[flag][width][.precision]type当中的 flag 部分。

- 标记

- 可以使得在指定的字段范围内, 待打印项左对齐.

程序示例:

#include<stdio.h>int main(void)
{int a = 123;printf("**********\n");printf("%-10d\n", a);return 0;
}

结果:

**********
123

+ 标记

有符号值若为正, 则在前面显示 +. 若为负, 则在前面显示 -.

程序示例:

#include<stdio.h>int main(void)
{int a = 123;int b = -123;printf("%+d\n", a);printf("%+d\n", b);return 0;
}

结果:

+123
-123

空格

有符号值若为正, 则在前面显示空格, 不显示任何符号, 若为负, 则在前面显示减号.

如果在转换说明的修饰符中, 正号 + 和空格同时存在, 则正号起作用而空格不起作用.

程序示例:

#include<stdio.h>int main(void)
{int a = 123;int b = -123;printf("% d\n", a);printf("%+ d\n", a); // 正号 + 和空格同时存在, 则正号起作用而空格不起作用printf("% d\n", b);printf("%+ d\n", b); // 正号 + 和空格同时存在, 则正号起作用而空格不起作用return 0;
}

结果:

 123
+123
-123
-123

# 标记

对于 %o, 输出将以 0 开始.

对于 %x 和 %X, 输出将以 0x 和 0X 开头.

对于所有的浮点数, 即使没有小数部分也会打印一个小数点.

程序示例:

#include<stdio.h>
#include<string.h>int main(void)
{float a = 123e2;printf("%.0f\n", a);printf("%#.0f\n", a);return 0;
}

结果:

12300
12300.

对于 %g 和 %G 格式, # 防止结果后面的 0 被删除.

0 标记

对于数值格式, 用前导 0 代替空格填充字段宽度.

对于整数格式, 如果出现 - 标记或者指定最少输出的数字个数, 则忽略 0 这个标记.

程序示例 1:

#include<stdio.h>int main(void)
{int a = 88;printf("**********\n");printf("%10d\n", a);printf("%010d\n", a);  // 用前导 0 代替空格填充字段宽度printf("%-010d\n", a);  // 出现 - 标记, 标记 0 不起作用return 0;
}

结果:

**********88
0000000088
88

程序示例 2:

#include<stdio.h>int main(void)
{float a = 1.2345;printf("**********\n");printf("%10.3f\n", a);printf("%010.3f\n", a);  // 对于浮点数,指定了精度,但标记 0 依然起作用,只有整数里面的标记 0 可能被覆盖不起作用return 0;
}

结果:

**********1.235
000001.235

程序示例 3:

#include<stdio.h>int main(void)
{int a = 12345;printf("**********\n");printf("%10d\n", a);     // 指定字段宽度为10printf("%10.3d\n", a);   // 指定最少输出3位,实际为5位,因此3被忽视,直接输出原来的数字printf("%010d\n", a);    // 不指定整数最少输出的数字个数,标记 0 起作用printf("%010.3d\n", a);  // 指定整数最少输出的数字个数,标记 0 不起作用return 0;
}

结果:

**********1234512345
000001234512345

转换说明的意义

数据存储在计算机中是以二进制的数字形式存储的, 但是用 printf 将其显示在屏幕上时显示的是字符. 比如在屏幕上显示 42 是显示字符 4 和字符 2.

转化说明就负责这一转换过程. 转换说明就是一种翻译说明. 转换说明把以二进制格式存储在计算机中的值转换成一系列字符(字符串)以便于显示。转换说明是翻译说明。

%%

可以使用 %% 打印一个百分号 %

程序示例:

#include<stdio.h>
#include<string.h>
int main(void)
{printf("Only %d%% students are good.", 30);return 0;
}

结果:

Only 30% students are good.

常见错误

1.

用 %d 打印浮点数时,不会将浮点数转换为整型。

程序示例:

#include<stdio.h>
int main(void)
{float a = 10.1111115;printf("%d\n", a);return 0;
}

结果:

-1610612736

各个系统结果可能不同。

刷新输出

printf() 语句先把输出发送到一个叫做缓冲区的中间存储区域,然后缓冲区中的内容再不断地被发送到屏幕上。

C 标准明确规定了何时把缓冲区中的内容发送到屏幕:当缓冲区满,遇到换行符或者需要输入时。

从缓冲区把数据发送到屏幕或文件被称为刷新缓冲区或清空缓冲区。

C 标准明确规定了何时向屏幕发送缓冲区的内容, 即刷新缓冲区: 缓冲区满了或遇到换行符或需要输入。

缓冲区分为输入缓冲区和输出缓冲区。输入分为有缓冲输入和无缓冲输入,输出分为有缓冲输出和无缓冲输出。

如果输入的内容能立即被程序使用,则为无缓冲输入。如果输入的内容需要在刷新了缓冲区后才能被程序利用,则为有缓冲输入。C 标准为有缓冲输入

某些交互式程序要求输入必须是无缓冲的,比如打游戏。

有缓冲输入/输出分为行缓冲和块缓冲,块缓冲也叫完全缓冲。

完全缓冲是指当缓冲区被填满时才刷新缓冲区,通常出现在文件输入中。缓冲区的大小取决于系统,常见的大小为 512 字节和 4096 字节。

行缓冲是指在出现换行符时刷新缓冲区。键盘输入通常是行缓冲输入,所以在按下 Enter 键之后才刷新缓冲区。

printf 函数的返回值

returns the number of characters printed, or a negative value if an error occurs.

printf() 函数返回它打印的字符的个数.

如果输出有误, 则 printf() 返回一个负值.

程序示例:

#include<stdio.h>
int main(void)
{printf("%d\n", printf("Hello\n"));return 0;
}

结果:

Hello
6

显然, 需要求 printf("Hello\n") 表达式的返回值, 需要先计算该表达式, 效果是打印出一句话, 即 Hello.

此返回值包括了所有的字符, 尤其是空格和转义字符如 \n 等.

* 修饰符的用法

输出时可以不预先指定字段的宽度, 可以通过程序来指定.

可以用 * 修饰符来替换字段宽度.

此时需要另一个参数来告诉函数, 这个字段宽度应该是多少.

即, 如果转换说明是 %*d, 则参数列表中应该包含 *d 对应的值.

该技巧也可用于浮点值指定精度和字段宽度.

程序示例:

#include<stdio.h>
#define NUMBER 123
int main(void)
{printf("Please enter field width: ");int width = 0;scanf("%d", &width);printf("This integer is %*d\n", width, NUMBER);return 0;
}

结果:

Please enter field width: 6
This integer is    123

程序示例:

#include<stdio.h>
#define NUMBER 123.456789
int main(void)
{printf("Please enter field width: ");int width = 0;scanf("%d", &width);printf("Please enter precision: ");int precision = 0;scanf("%d", &precision);printf("This number is %*.*f.\n", width,precision,NUMBER);return 0;
}

结果:

Please enter field width: 14
Please enter precision: 3
This number is        123.457.

相关文章:

C 语言的 printf() 函数

概述 printf() 的作用: Print formatted output to the standard output stream. printf() 的函数原型: int printf( const char *format, argument1, argument2, ... );printf() 函数的基本格式: printf(格式字符串, 待打印项列表);或者写为: printf(格式字符串, 待打印项 1,…...

【GitHub每日速递 250915】3 个宝藏开源项目:超长语音合成、算法学习库、自托管软件导航,开发者速收

原文:【GitHub每日速递 250915】3 个宝藏开源项目:超长语音合成、算法学习库、自托管软件导航,开发者速收 VibeVoice:挑战传统TTS,最长90分钟多角色语音合成神器来袭! VibeVoice 是一个长对话文本转语音模型的开源项目。简单讲,它能将连续的文本内容自然地转换成语音,支…...

C 语言头文件

两种写法: #include <stdio.h> // 编译系统在系统头文件所在目录搜索 #include "stdlib.h" // 编译系统首先在当前的源文件目录中查找 stdlib.h,找不到的话,再转向系统头文件所在目录搜索引用系统头文件时,使用两种形式都可以,但是 #include <> 的…...

AFL++环境搭建

第 1 步:更新软件源并安装基本工具 首先更新软件包列表 sudo apt update 升级现有软件包 sudo apt upgrade -y 安装基本编译工具(包括gcc) sudo apt install -y build-essential 安装Python3和相关工具 sudo apt install -y python3 python3-dev python3-pip 创建python符号…...

晚安

cai~一定是做梦,不然还能是什么,对不对? 总之就是梦到一年前的自己对我说话: 第一句:变菜了 第二句:本来就挺菜 然后开始大笑,前车窗上晃动着一双眼睛,小,但是不瞎。...

读人形机器人12体育领域

读人形机器人12体育领域1. 体育领域 1.1. 在体育竞技这个不断挑战人类极限的领域,人形机器人正以教练和训练助手的身份进入 1.2. 由金属材料、代码和AI技术打造的机器人,正在革新运动员的训练方式、恢复过程和竞技表现 2. 个性化训练计划 2.1. 追求卓越的运动表现既是一门科学…...

【QT】C++基础

前言 目前打算一周内学习QT的基本使用,从此篇"C++基础"文章开始记录分享学习经验。 C++及其各种定义C++是面向对象的,什么是面向对象,什么是面向过程? 举例 计算a+b的值: C语言,直接计算a+b;C++,先将a+b封装,封装到类里面形成一个方法,然后再通过这个类去…...

安全研究者的MCP服务器宝典:BugBounty工具集锦

本资源库汇集了多个专为漏洞赏金、渗透测试和信息安全研究设计的MCP服务器,提供一站式安全工具整合,帮助安全专业人员高效开展授权安全测试和研究工作。BugbountiesMCP 一个专为漏洞赏金、渗透测试和信息安全研究设计的Model Context Protocol (MCP) 服务器综合列表资源库。 …...

Unity的VisualStudio工程链接不同步、显示异常处理方法

前段时间,在某次更新项目工程后,原本好好的VS工程,变得不认Unity_Editor的宏、Using显示不正确了,一般来说,这个在Unity使用中,很常见,通用解决办法是:在Unity的Extrenal Tool里有一个Regenerate的按钮,直接重新生成解决方案。 关了Unity工程,到路径里把sln和proj这些…...

Java 高性能与可维护性实战:从语言特性到工程化全链路

一、设计目标:为什么“快”和“稳”必须同时追 在真实业务里,“快”(吞吐、延迟)与“稳”(可维护、可演进)往往拉扯。高性能带来的复杂度不应成为维护负担,而可维护的抽象也不应牺牲关键路径。可落地的目标是:可预测性能:接口在 SLA 下延迟稳定,P95/P99 可控。渐进式…...

二叉树的递归遍历

前中后序的递归遍历 递归算法的三要素确定递归函数的参数和返回值:要确定哪些参数是递归过程中需要处理的,需要处理的就在递归函数里面加上这个参数;然后确定每次返回的递归值是什么; 确定终止条件:必须写终止条件;如果不写终止条件就会栈溢出; 确定单层递归的逻辑: 确…...

我的大学成长与规划

大家好,我是李思慧,一名计算机科学与技术专业的大二学生。生活里,我是个爱折腾的人,喜欢在文字的世界里遨游,也热衷于用视频和图片记录生活、表达创意。 在信工分团委宣传部当干事到现在的部长,是我成长很快的一段时光。从最开始跟着学长学姐学习写各种活动和通知的推文,…...

【笔记】拉格朗日插值

拉格朗日插值的推导对于一个 \(n\) 次多项式 \(f(x) = \sum_{k = 0}^n a_kx^k\),我们只要知道它在 \(n+1\) 个不同点处的取值,就可以进一步解出它的系数 但使用高斯消元法的时间复杂度是 \({\cal O}(n^3)\) 的,如果我们只是想知道这个多项式在某一点 \(x\) 处的值,希望有复…...

自定义渲染管线(Unity Cocos)

参考链接: 团结引擎 - 手册: 在自定义渲染管线中创建简单渲染循环 可定制渲染管线(Deprecated) | Cocos Creator Custom SRP - Custom Render Pipeline | 三叔的数字花园 自定义渲染管线_Unity SRP从零搭建一套图形渲染管线_UWA学堂(翻译的Catlik,还收费) Unity Custom S…...

这是一个测试

这是一个测试...

文献阅读 | Survey of Hallucination in Natural Language Generation

问题描述 本文主要讲了NLG中的幻觉现象 幻觉定义:模型生成不忠实于源内容或无意义的文本 幻觉分类:内在幻觉(矛盾、完全错误的)、外在幻觉(无法被验证) 幻觉危害:隐私泄露 成因:评估指标:统计 metric:基于 n-gram 重叠,如 PARENT(结合源和目标)、Knowledge F1(对…...

技术 | LLaMA Factory微调记录重修版

之前投的那篇教程我自己回看一遍都不太搞得明白,从新梳理一遍 1. 云服务器准备 恒源云 (gpushare.com) 配置建议:GPU: RTX 3090 (24GB) 或 RTX 4090 (24GB) 系统: Ubuntu 20.04/22.04 存储: 至少 50GB 空间2. 环境检查与初始化 # 检查GPU状态 nvidia-smi# 检查系统信息 df -h…...

支付中心的钱包类业务应该怎么设计

钱包类业务在支付行业里有一些比较固定的模式(无论是支付宝余额宝、微信零钱,还是 Stripe Balance / Paytm Wallet),基本设计目标是:余额和资金安全:必须有严格的账实一致、幂等和防篡改能力。高并发读写:充值/消费/退款频繁,要求快速的扣减和回滚能力。清晰的流水:任…...

MySQL索引浅析

NORMAL:普通索引,仅用于加速查询,允许字段值重复。 UNIQUE:唯一索引,不仅能加速查询,还会强制字段值的唯一性(即该字段下的值不能重复)。 FULLTEXT:全文索引,用于全文搜索场景(如文章内容的关键词检索)。 SPATIAL:空间索引,用于地理空间数据类型(如 GEOMETRY、P…...

WF 2025 游记

第一次出国旅行因为错误在 EC-Final 显神威成功出线,我得以以 RCDS 随队人员的身份作为 ICPC Guest 参与 2025 ICPC World Final Baku. Day -5 ​ 被然叔拉到苏州给软件杯打工。 ​ 出站时落雨大暴,翻书包发现没有雨伞,凌乱中就看到然叔开着辆绿色 SUV 过来接我,到了苏州大…...

17.时间处理

17.时间处理日期和时间是日常编程常用的功能之一。如果没有日期和时间,会导致很多功能无法实现,例如日志记录、定时任务、时间延迟等。Go标准库提供了操作日期和时间的方法。在提到时间,还需要注意不同地区的时间会不一样,所以这里还需要考虑到不同时区、不同历法等带来的影…...

[MCP][02]快速入门MCP开发

快速入门MCP Server和MCP Client 开发,以及Client集成LLM前言 很多文档和博客都只介绍如何开发MCP Server,然后集成到VS Code或者Cursor等程序,很少涉及如何开发MCP Host和MCP Client。如果你想要在自己的服务中集成完整的MCP功能,光看这些是远远不够的。所以本文及后续的M…...

numpy入门

numpy 基本属性 import numpy as np arr = np.arange(15).reshape((3,5)) print(arr) # [[ 0 1 2 3 4],[ 5 6 7 8 9],[10 11 12 13 14]] print(type(arr)) # 类型 <class numpy.ndarray> print(arr.shape) # 形状元组 (3, 5) print(arr.ndim) # 维度 2 print(arr…...

【simpleFOC】一个电机如何模拟不同旋钮的手感反馈?

原文链接:https://mp.weixin.qq.com/s?__biz=MzU1NjEwMTY0Mw==&mid=2247597033&idx=2&sn=e92f8f1dec8b363aa209788354f8fa64&chksm=fad1130bfafd0b9af53b0f110e354d8772f6c5a0d98735690d1c0c75d0c3c75785ea1041ea1a&scene=27概述simpleFOC可以实现对各种…...

第一周作业2

我叫陈俊杰,今年19岁,目前是一名计算机相关专业的学生。很高兴能在博客园与大家分享我的学习与生活经历。 兴趣爱好 我热爱运动,尤其是羽毛球、篮球、游泳和攀岩。这些运动不仅让我保持了健康的体魄,也培养了我的团队协作能力和坚持不懈的精神。此外,我也喜欢探索新技术,…...

第一次课堂作业

大家好!我是一名数据科学与大数据技术专业的大三学生。如果用一句话形容现在的自己,那就是 “正处在专业技能积累的爬坡期,一边为过去的基础不扎实查漏补缺,一边对未来的技术方向满怀期待”。这篇博客想和大家聊聊我的故事、我的技能现状,以及我为接下来的学习和未来发展制…...

[高可用/负载均衡] Ribbon LoadBalancer: 开源的客户端式负载均衡框架

0 序言某项目上,原先为自建的数据库集群提供了负载均衡IP服务器(简称: ELB IP Server),客户端的数据库请求URL都统一走ELB IP。但随着业务量的增长,识别到一个严峻的现实:其一,考虑到未来的业务增长情况,云厂商提供的 ELB IP Server 云服务的入网带宽必将完全无法满足本项…...

梦话周记

忘记是哪天了。 傍晚,暗蓝色的天空,水雾,朦胧的光晕。 此时的天空与以往理解的深邃可谓是一点关系都没有,它的深邃不再来自于天空,而是来自于大海。什么地方是深蓝色的,湿润的,广阔的?海洋。 其实气体与液体有很多相似之处,它们都有浮力,都是流体。我们是不是也生活在…...

【电机控制】无刷电机结构阐述---磁极数、槽数

一、磁极数P与槽数N 1.磁极数P 定义:转子上磁极的数量,既转子上磁钢的数量,磁钢均匀的排列在转子上磁铁必定是NS极成对使用,所以极数必然是偶数。 2.槽数N 定义:定子铁芯的槽数量,既定子上的电磁铁极数量,每一个槽上都饶有一组线圈,如上图有12个槽,所以是12N电机由于无…...

金刚怒目是我哭

金刚怒目是我哭是你们太不善良,还是我太不正常马喽马基米退圈了。我下载的its my cry没了,my mujuca也只有前三集 这个可以说是我的入坑作 确实有点刻意 反正不是日常向 即使现在看来也是无可厚非的 但还是爆了 我应该说戾气很重吗 杂食党,,,理中客,和稀泥 说不出话 雨...

nginx使用默认端口80作为服务端口

背景:http默认端口是80,配置nignx.conf,希望服务url直接输入ip不用输入端口 给server配置80以及加default_server ,老是报错,后面发现是因为 include /etc/nginx/sites-enabled/*; 这个配置的server段占用了80 解决办法:把默认配置/etc/nginx/sites-available/default 里…...

机器学习和推荐算法顶级会议和期刊

在机器学习(ML)与推荐系统(Recommender Systems)领域,CIKM 和 TKDE 是信息检索、数据挖掘及数据库领域的重要学术载体,二者分别以会议(CCF A 类)和期刊(CCF A 类)形式存在,覆盖 “推荐算法”“用户行为分析”“知识图谱与推荐融合” 等核心方向,是该领域研究者发表…...

java使用mysql

用jdbc操作mysqlhttps://www.runoob.com/java/java-mysql-connect.htmlmysql8之前和之后的连接配置有差异。实际使用时,一般还需要个功能,就是连接池。这个springboot自带了,是hikari。hikari初始化的时候,也需要配置mysql的连接参数,所以一般都是在这里设置的。https://w…...

2025年医疗行业API安全最佳实践与深度案例分析:从理论到全面落地

2025年医疗行业API安全最佳实践与深度案例分析:从理论到全面落地医疗API安全是保障患者隐私和医疗数据安全的关键环节。医疗机构、信息化服务商和安全厂商需遵循GB/T《数据接口安全风险监测方法》要求,建立覆盖"发现-监测-处置"的全生命周期防护体系。以金华市中心…...

2026 NOI 做题记录(二)

推荐阅读:D、N、W、Y、Z、AB、AC、AD、AE、AFContest Link \(\text{By DaiRuiChen007}\)A. [ARC194E] Swap 0^X and 1^Y (3) Problem Link 删掉所有的串 \(0^x\) 以及 \(1^y\),每次操作不会跨过里面的连续段,因此剩下的串必定相同。 取出每个连续段,任意两个 \(0\) 连续段在…...

lc1027-最长等差数列

难度:中等(后期)题目描述给定一个数组,计算最长等差数列的长度示例 输入:nums = [3,6,9,12] 输出:4 解释:3 6 9 12输入:nums = [9,4,7,2,10] 输出:3 解释:4 7 10输入:nums = [20,1,15,3,10,5,8] 输出:4 解释:20 15 10 5题解思路:DPf(i,j): 以 i 结尾,公差为 j 结…...

13

#include <math.h>int main() { int n; scanf("%d", &n); while (n--) {int l, r;scanf("%d %d", &l, &r); int y_max = (int)sqrt(r);//算l的平方根,然后向上取整并强制转换为整数, y >= lint y_min = (int)ceil(sqrt(l));int c…...

np.zeros函数

np.zeros 是 NumPy 库中的一个非常常用的函数,它的作用是创建一个指定形状和数据类型的新数组,并用 0 来填充所有元素。 np.zeros 的基本用法 函数的完整签名是 numpy.zeros(shape, dtype=float, order=C)。shape:你想要创建的数组的形状。可以是一个整数(用于一维数组)或…...

Langchain之让LLM拥有记忆

langchain的Memory 如果AI有记忆,我们就不需要手动维护一个储存消息历史的列表 让LLM拥有记忆的方法有很多,我更喜欢使用的方法是以下方案,其优点是灵活度比较高 from langchain.memory import ConversationBufferMemory from langchain_core.prompts import ChatPromptTemp…...

25.9.14

(今天的)...

.net PublishSingleFile 打包程序提取

.net PublishSingleFile 打包程序提取 目录.net PublishSingleFile 打包程序提取提取 Bundle 的常用方法分界线工具SingleFileExtractor (低版本)SelfContainedExtractor (.NET 5+)定位offset <PublishSingleFile>true</PublishSingleFile>该部分内容为AI…...

实用指南:Java类加载机制

实用指南:Java类加载机制pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size…...

C 语言注释

C 语言有两种注释, 即 // 和 /* ... */. /* */ 被称为 C 风格的注释, 是 ANSI C 的注释. // 被称为 C++ 风格的注释, 是 C99 新增的注释, 只有支持 C99 和 C11 的编译器才能识别这种注释. 该风格的注释被广泛应用于 C++ 和 Java. 注释在预编译阶段会被替换为一个空格. 代码示例…...

扫描线

前题引入 扫描线是用来求给你n个矩阵求他们围起来的总面积。 问题分析 可能有一些弱智的小朋友说直接把所有的矩阵的面积加起来再减掉重复的不就可以啦。 如果,你这么想请问(1<=n<=1e5)请问你该如何应对,所以我们就引入了个新算法:扫描线(废话) 先在我们先画一张图:…...

C语言中的查找与排序算法整理

查找与排序算法整理 1 查找算法 1.1 顺序查找 1.1.1 算法原理 顺序查找又称线性查找,是一种基本的查找算法,其原理是:从头开始遍历:从数据集的起始位置开始,逐个检查每个元素。 比较目标:对于每个遍历到的元素,将其与目标元素进行比较。 查找成功:如果当前元素等于目标…...

k8s练习

k8s练习 1. 简述Kubernetes是什么? Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。 2. Kubernetes的组成有哪些? Kubernetes主要由以下几个组件组成:kube-apiserver:提供REST API服务,作为系统的控制入口。 kube-controller-manager:执…...

css-2

css正常布局流浮动弹性盒子a {//行内盒子,比如a如果给了flex布局,则可以直接设置宽高display: flex }淘宝京东多行伸缩布局 瀑布流百度图片综合案例...

AtCoder Beginner Contest 423 ABCDEF 题目解析

A - Scary Fee 题意 你的存折中有 \(X\) 元,从存折中取钱需要花手续费。 取钱必须以 \(1000\) 元为单位,并且每取 \(1000\) 元就需要额外支付 \(C\) 元的手续费。 问你最多可以取出多少钱? 思路 我们可以把 \(C\) 元手续费当作单次取钱的一部分,也就是每当我们想取 \(1000\…...

numpy中的shape属性

.shape 不是一个函数,而是numpy的一个属性(attribute),用于获取数组维度信息。它返回一个元组(tuple),元组中的每个元素代表对应维度的大小。 import numpy as np# 1D 数组 (向量) arr1d = np.array([1, 2, 3, 4, 5]) print(f"数组内容: {arr1d}") print(f&qu…...

mac 查看fat32磁盘

1.首先安装社区维护的ntfs工具。 brew tap gromgit/homebrew-fuse #### brew install ntfs-3g2.然后就是mount啦 这里的/dev/diskXsY 就是自己看啦,看到下面是没有externatl(外部拓展这一项的,或者使用磁盘工具,如果插上了u盘也是可以看到的)然后使用命令 mkdir /Volumes/…...