文档库 最新最全的文档下载
当前位置:文档库 › sprintf使用方法详解

sprintf使用方法详解

sprintf使用方法详解
sprintf使用方法详解

sprintf()函数的使用方法

格式化命令。sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。

sprintf 将字串格式化。

在头文件 #include

>中

语法: int sprintf(string format, mixed [args]...);

返回值:字符串长度(strlen)

sprintf格式的规格如下所示。[]中的部分是可选的。

%[指定参数$][标识符][宽度][.精度]指示符

若想输出`%'本身时, 请这样`%%'处理。

1. 处理字符方向。负号时表示从后向前处理。

2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。

3. 字符总宽度。为最小宽度。

4. 精确度。指在小数点后的浮点数位数。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

转换字符

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

%% 印出百分比符号,不转换。

%c 整数转成对应的 ASCII 字元。

%d 整数转成十进位。

%f 倍精确度数字转成浮点数。

%o 整数转成八进位。

%s 整数转成字串。

%x 整数转成小写十六进位。

%X 整数转成大写十六进位。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

$money = 123.1

$formatted = sprintf ("%06.2f", $money); // 此时变数 $ formatted 值为 "123.10"

$formatted = sprintf ("%08.2f", $money); // 此时变数 $ formatted 值为 "00123.10"

$formatted = sprintf ("%-08.2f", $money); // 此时变数 $ formatted 值为 "123.1000"

$formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化为百分比

?>

¢%08.2f 解释:

%开始符

0是 "填空字元" 表示,如果长度不足时就用0来填满。

8格式化后总长度

2f小数位长度,即2位

¢第3行值为"00123.10" 解释:

因为2f是(2位)+小数点符号(1)+前面123(3位)=6位,总长度为8位,故前面用[填空字元]0表示,即00123.10

¢第4行值为"123.1000" 解释:

-号为反向操作,然后填空字元0添加在最后面了

在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。

sprintf 是个变参函数,定义如下:

int sprintf( char *buffer, const char *format [, argument] ... );

除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:

格式化字符串上。

printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。

格式化数字字符串

sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代

itoa。

如:

//把整数123 打印成一个字符串保存在s 中。

sprintf(s, "%d", 123); //产生"123"

可以指定宽度,不足的左边补空格:

sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"

当然也可以左对齐:

sprintf(s, "%-8d%8d", 123, 4567); //产生:"123 4567"

也可以按照16 进制打印:

sprintf(s, "%8x", 4567); //小写16 进制,宽度占8 个位置,右对齐

sprintf(s, "%-8X", 4568); //大写16 进制,宽度占8 个位置,左对齐

这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽

度的数字前面加个0 就可以了。

sprintf(s, "%08X", 4567); //产生:"000011D7"

上面以”%d”进行的10 进制打印同样也可以使用这种左边补0 的方式。

这里要注意一个符号扩展的问题:比如,假如我们想打印短整数(short)-1 的内存16 进制表示形式,在Win32 平台上,一个short 型占2 个字节,所以我们自然希望用4 个16 进制数字来打印它:

short si = -1;

sprintf(s, "%04X", si);

产生“FFFFFFFF”,怎么回事?因为spritnf 是个变参函数,除了前面两

个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4 字节的整数还是个

2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符

号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。

如果你想看si 的本来面目,那么就应该让编译器做0 扩展而不是符号扩展(扩展时二进制左边补0 而不是补符号位):

sprintf(s, "%04X", (unsigned short)si);

就可以了。或者:

unsigned short si = -1;

sprintf(s, "%04X", si);

sprintf 和printf 还可以按8 进制打印整数字符串,使用”%o”。注意8 进制和16 进制都不会打

印出负数,都是无符号的,实际上也就是变量的内部编码的直接的16 进制或8 进制表示。

控制浮点数打印格式

浮点数的打印和格式控制是sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保

留小数点后6 位数字,比如:

sprintf(s, "%f", 3.1415926); //产生"3.141593"

但有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m /nf”格式,其中m 表

示打印的宽度,n 表示小数点后的位数。比如:

sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"

sprintf(s, "%-10.3f", 3.1415626); //产生:"3.142 "

sprintf(s, "%.3f", 3.1415626); //不指定总宽度,产生:"3.142"

注意一个问题,你猜

int i = 100;

sprintf(s, "%.2f", i);

会打出什么东东来?“100.00”?对吗?自己试试就知道了,同时也试试下面这个:

sprintf(s, "%.2f", (double)i);

第一个打出来的肯定不是正确结果,原因跟前面提到的一样,参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。而函数执行时函数本身则并不知道当年被压入栈里的是个整数,于是可怜的保存整数i 的那4 个字节就被不由分说地强行作为浮点数格式来解释了,整个乱套了。不过,如果有人有兴趣使用手工编码一个浮点数,那么倒可以使用这种方法来检验一下你手工编排的结果是否正确。

字符/Ascii 码对照

我们知道,在C/C++语言中,char 也是一种普通的scalable 类型,除了字长之外,它与short,

int,long 这些类型没有本质区别,只不过被大家习惯用来表示字符和字符串而已。(或许当年该把

这个类型叫做“byte”,然后现在就可以根据实际情况,使用byte 或short 来把char 通过typedef 定义出来,这样更合适些)于是,使用”%d”或者”%x”打印一个字符,便能得出它的10 进制或16 进制的ASCII 码;反过来,使用”%c”打印一个整数,便可以看到它所对应的ASCII 字符。以下程序段把所有可见字

符的ASCII 码对照表打印到屏幕上(这里采用printf,注意”#”与”%X”合用时自动为16 进制数增加”0X”前缀):

for(int i = 32; i < 127; i++) {

printf("[ %c ]: %3d 0x%#04X\n", i, i, i);

}

连接字符串

sprintf 的格式控制串中既然可以插入各种东西,并最终把它们“连成一串”,自然也就能够连

接字符串,从而在许多场合可以替代strcat,但sprintf 能够一次连接多个字符串(自然也可以同时

在它们中间插入别的内容,总之非常灵活)。比如:

char* who = "I";

char* whom = "CSDN";

sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "

strcat 只能连接字符串(一段以’’结尾的字符数组或叫做字符缓冲,null-terminated-string),但有时我们有两段字符缓冲区,他们并不是以’’结尾。比如许多从第三方库函数中返回的字符数组,从硬件或者网络传输中读进来的字符流,它们未必每一段字符序列后面都有个相应的’’来结尾。如果直接连接,不管是sprintf 还是strcat 肯定会导致非法内存操作,而strncat 也至少要求第一个参数是个null-terminated-string,那该怎么办呢?我们自然会想起前面介绍打印整数和浮点数时可以指定宽度,字符串也一样的。比如:

char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};

char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'};

如果:

sprintf(s, "%s%s", a1, a2); //Don't do that!

十有八九要出问题了。是否可以改成:

sprintf(s, "%7s%7s", a1, a2);

也没好到哪儿去,正确的应该是:

sprintf(s, "%.7s%.7s", a1, a2);//产生:"ABCDEFGHIJKLMN"

这可以类比打印浮点数的”%m/nf”,在”%m.ns”中,m 表示占用宽度(字符串长度不足时补空格,超出了则按照实际宽度打印),n 才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m 没什么大用,还是点号后面的n 用的多。自然,也可以前后都只取部分字符:

sprintf(s, "%.6s%.5s", a1, a2);//产生:"ABCDEFHIJKL"

在许多时候,我们或许还希望这些格式控制符中用以指定长度信息的数字是动态的,而不是静态指定的,因为许多时候,程序要到运行时才会清楚到底需要取字符数组中的几个字符,这种动态的宽度/精度设置功能在sprintf 的实现中也被考虑到了,sprintf 采用”*”来占用一个本来需要一个指定宽度或精度的常数数字的位置,同样,而实际的宽度或精度就可以和其它被打印的变量一样被提供出来,于是,上面的例子可以变成:

sprintf(s, "%.*s%.*s", 7, a1, 7, a2);

或者:

sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);

实际上,前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值,比如:

sprintf(s, "%-*d", 4, 'A'); //产生"65 "

sprintf(s, "%#0*X", 8, 128); //产生"0X000080","#"产生0X

sprintf(s, "%*.*f", 10, 2, 3.1415926); //产生" 3.14"

打印地址信息

有时调试程序时,我们可能想查看某些变量或者成员的地址,由于地址或者指针也不过是个32 位的数,你完全可以使用打印无符号整数的”%u”把他们打印出来:

sprintf(s, "%u", &i);

不过通常人们还是喜欢使用16 进制而不是10 进制来显示一个地址:

sprintf(s, "%08X", &i);

然而,这些都是间接的方法,对于地址打印,sprintf 提供了专门的”%p”:

sprintf(s, "%p", &i);

我觉得它实际上就相当于:

sprintf(s, "%0*x", 2 * sizeof(void *), &i);

利用sprintf 的返回值

较少有人注意printf/sprintf 函数的返回值,但有时它却是有用的,spritnf 返回了本次函数调用

最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf 调用结束以后,你无须再调用一次

strlen 便已经知道了结果字符串的长度。如:

int len = sprintf(s, "%d", i);

对于正整数来说,len 便等于整数i 的10 进制位数。

下面的是个完整的例子,产生10 个[0, 100)之间的随机数,并将他们打印到一个字符数组s 中,

以逗号分隔开。

#include

#include

#include

int main() {

srand(time(0));

char s[64];

int offset = 0;

for(int i = 0; i < 10; i++) {

offset += sprintf(s + offset, "%d,", rand() % 100);

}

s[offset - 1] = '\n';//将最后一个逗号换成换行符。

printf(s);

return 0;

}

设想当你从数据库中取出一条记录,然后希望把他们的各个字段按照某种规则连接成一个字

符串时,就可以使用这种方法,从理论上讲,他应该比不断的strcat 效率高,因为strcat 每次调用

都需要先找到最后的那个’’的位置,而在上面给出的例子中,我们每次都利用sprintf 返回值把这

个位置直接记下来了。

MSDN中例子:

// crt_sprintf.c// compile with: /W3// This program uses sprintf to format various// data and place them in the string named buffer.

#include

int main( void )

{

char buffer[200], s[] = "computer", c = 'l';

int i = 35, j;

float fp = 1.7320534f; // Format and print various data:

j = sprintf( buffer, " String: %s\n", s ); // C4996

j += sprintf( buffer + j, " Character: %c\n", c ); // C4996

j += sprintf( buffer + j, " Integer: %d\n", i ); // C4996

j += sprintf( buffer + j, " Real: %f\n", fp );// C4996

// Note: sprintf is deprecated; consider using sprintf_s instead

printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );

}

Copy

Output:

String: computer

Character: l

Integer: 35

Real: 1.732053

character count = 79

编辑本段

使用sprintf 的常见问题

sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访

问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通

常用眼睛再把出错的代码多看几眼就看出来了。

缓冲区溢出

第一个参数的长度太短了,没的说,给个大点的地方吧。当然也可能是后面的参数的问

题,建议变参对应一定要细心,而打印字符串时,尽量使用”%.ns”的形式指定最大字符数。

忘记了第一个参数

低级得不能再低级问题,用printf 用得太惯了。//偶就常犯。:。(

变参对应出问题

通常是忘记了提供对应某个格式符的变参,导致以后的参数统统错位,检查检查吧。尤

其是对应”*”的那些参数,都提供了吗?不要把一个整数对应一个”%s”,编译器会觉得你

欺她太甚了(编译器是obj 和exe 的妈妈,应该是个女的,:P)。

strftime

sprnitf 还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也

是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为

了在出现问题时可以推卸责任吧。这里举个例子:

time_t t = time(0);

//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。

char s[32];

strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));

sprintf 在MFC 中也能找到他的知音:CString::Format,strftime 在MFC 中自然也有她的同道:

CTime::Format,这一对由于从面向对象哪里得到了赞助,用以写出的代码更觉优雅。

C语言函数手册(DOC)

一、字符测试函数 isupper()测试字符是否为大写英文字 ispunct()测试字符是否为标点符号或特殊符号isspace()测试字符是否为空格字符 isprint()测试字符是否为可打印字符 islower()测试字符是否为小写字母 isgraphis()测试字符是否为可打印字符 isdigit()测试字符是否为阿拉伯数字 iscntrl()测试字符是否为ASCII码的控制字符isascii()测试字符是否为ASCII码字符 isalpha()测试字符是否为英文字母 isalnum()测试字符是否为英文或数字 isxdigit()测试字符是否为16进制数字 二、字符串操作函数 strtok()字符串分割函数 strstr()字符串查找函数 strspn()字符查找函数 strrchr()定位字符串中最后出现的指定字符 strpbrk()定位字符串中第一个出现的指定字符strncpy()复制字符串 strncat()字符串连接函数 strncasecmp()字符串比较函数(忽略大小写) strlen()字符串长度计算函数 strdup()复制字符串 strcspn()查找字符串 strcpy()复制字符串 strcoll()字符串比较函数(按字符排列次序) strcmp()字符串比较函数(比较字符串) strchr()字符串查找函数(返回首次出现字符的位置) strcat()连接字符串 strcasecmp()字符串比较函数(忽略大小写比较字符串) rindex()字符串查找函数(返回最后一次出现的位置) index()字符串查找函数(返回首次出现的位置) toupper()字符串转换函数(小写转大写) tolower()字符串转换函数(大写转小写) toascii()将整数转换成合法的ASCII码字符 strtoul()将字符串转换成无符号长整型数

Sprintf函数的用法

Sprintf函数的用法: 函数简介: 函数功能:把格式化的数据写入某个字符串 头文件:stdio.h 函数原型:int sprintf( char *buffer, const char *format, [ argument] … ) ; 返回值:字符串长度(strlen) 参数说明及应用举例 sprintf格式的规格如下所示。[]中的部分是可选的。 %[指定参数][标识符][宽度][.精度]指示符 若想输出`%'本身时, 请这样`%%'处理。 1. 处理字符方向。负号时表示从后向前处理。 2. 填空字元。0 的话表示空格填0;空格是内定值,表示空格就放着。 3. 字符总宽度。为最小宽度。 4. 精确度。指在小数点后的浮点数位数。 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 转换字符 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=- %% 印出百分比符号,不转换。 %c 整数转成对应的ASCII 字元。 %d 整数转成十进位。 %f 倍精确度数字转成浮点数。 %o 整数转成八进位。 %s 整数转成字符串。 %x 整数转成小写十六进位。 %X 整数转成大写十六进位。 我们的用法: Uchar sf[20],sd[20]; d=124; a = sprintf(sf,"%.0f",d); // Long(Int)到char字符串 d=12422.422; a = sprintf(sd,"%f",d); // float 到char字符串 a = sprintf(sd,"%.6f",d); // float 到char字符串 这两句相等;即浮点型转换时,小数位不指定情况下为最大6位; 注意:以防sd缓冲区溢出,待转换数据先做判断,大于0xFFFFFFFF

Python py2exe使用方法

一、简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。 py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序。py2exe是发布在开源许可证下的。 二、安装py2exe 从https://www.wendangku.net/doc/b517843352.html,/py2exe下载并运行与你所安装的Python对应的py2exe 版本的installer,这将安装py2exe和相应的例子;这些例子被安装在lib\site-packages\py2exe\samples目录下。 三、py2exe的用法 如果你有一个名为helloworld.py的python脚本,你想把它转换为运行在windows上的可执行程序,并运行在没有安装python的windows系统上,那么首先你应写一个用于发布程序的设置脚本例如mysetup.py,在其中的setup函数前插入语句import py2exe 。 mysetup.py示例如下: # mysetup.py from distutils.core import setup import py2exe setup(console=["helloworld.py"]) 然后按下面的方法运行mysetup.py: python mysetup.py py2exe 上面的命令执行后将产生一个名为dist的子目录,其中包含了helloworld.exe,python24.dll,library.zip这些文件。 如果你的helloworld.py脚本中用了已编译的C扩展模块,那么这些模块也会被拷贝在个子目录中,同样,所有的dll文件在运行时都是需要的,除了系统的dll文件。 dist子目录中的文件包含了你的程序所必须的东西,你应将这个子目录中的所有内容一起发布。 默认情况下,py2exe在目录dist下创建以下这些必须的文件: 1、一个或多个exe文件。 2、python##.dll。 3、几个.pyd文件,它们是已编译的扩展名,它们是exe文件所需要的;加上其它的.dll文件,这些.dll是.pyd所需要的。 4、一个library.zip文件,它包含了已编译的纯的python模块如.pyc或.pyo 上面的mysetup.py创建了一个控制台的helloword.exe程序,如果你要创建一个图形用户界的程序,那么你只需要将mysetup.py中的console=["helloworld.py"]替换为windows=["myscript.py"]既可。

C语言中可变参数的用法

C语言中可变参数的用法 文章导读:我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法: printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s", i, s); 究竟如何写可变参数的C函数以及这些可变参数的函数编译器是如何实现的呢?本文就这个问题进行一些探讨,希望能对大家有些帮助.会C++的网友知道这些问题在C++里不存在,因为C++具有多态性.但C++是C的一个超集,以下的技术也可以用于C++的程序中.限于本人的水平,文中如果有不当之处,请大家指正. 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法: printf("%d",i); printf("%s",s); printf("the number is %d ,string is:%s", i, s); 究竟如何写可变参数的C函数以及这些可变参数的函数编译器是如何实现的呢?本文就这个问题进行一些探讨,希望能对大家有些帮助.会C++的网友知道这些问题在C++里不存在,因为C++具有多态性.但C++是C 的一个超集,以下的技术也可以用于C++的程序中.限于本人的水平,文中如果有不当之处,请大家指正. (一)写一个简单的可变参数的C函数 下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏: void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr ); va在这里是variable-argument(可变参数)的意思.这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.下面我们写一个简单的可变参数的函数,改函数至少有一个整数参数,第二个参数也是整数,是可选的.函数只是打印这两个参数的值. void simple_va_fun(int i, ...) {

c语言关键字的用法详解优选稿

c语言关键字的用法详 解 集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)

1.Static用法 1.1static声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 1.2特点 A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数) E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。 函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函

数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。 扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字st atic是为了表示退出一个块后仍然存在的局部变量。随后,static在C 中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java 中此关键字的含义相同)。 1.3关键字static的作用是什么? 1.4 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1.4.1在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 int testStatic() { int x=1; x++; return x; }

py2exe使用方法

py2exe使用方法 一、简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序。 py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序。py2exe是发布在开源许可证下的。 二、安装py2exe 从https://www.wendangku.net/doc/b517843352.html,/py2exe下载并运行与你所安装的Python对应的py2exe 版本的installer,这将安装py2exe和相应的例子;这些例子被安装在lib\site-packages\py2exe\samples目录下。 三、py2exe的用法 如果你有一个名为helloworld.py的python脚本,你想把它转换为运行在windows上的可执行程序,并运行在没有安装python的windows系统上,那么首先你应写一个用于发布程序的设置脚本例如mysetup.py,在其中的setup函数前插入语句import py2exe 。 mysetup.py示例如下: # mysetup.py from distutils.core import setup import py2exe setup(console=["helloworld.py"]) 然后按下面的方法运行mysetup.py: python mysetup.py py2exe 上面的命令执行后将产生一个名为dist的子目录,其中包含了helloworld.exe,python24.dll,library.zip这些文件。 如果你的helloworld.py脚本中用了已编译的C扩展模块,那么这些模块也会被拷贝在个子目录中,同样,所有的dll文件在运行时都是需要的,除了系统的dll文件。 dist子目录中的文件包含了你的程序所必须的东西,你应将这个子目录中的所有内容一起发布。 默认情况下,py2exe在目录dist下创建以下这些必须的文件: 1、一个或多个exe文件。 2、python##.dll。 3、几个.pyd文件,它们是已编译的扩展名,它们是exe文件所需要的;加上其它的.dll文件,这些.dll是.pyd所需要的。 4、一个library.zip文件,它包含了已编译的纯的python模块如.pyc或.pyo 上面的mysetup.py创建了一个控制台的helloword.exe程序,如果你要创建一个图形用户界的程序,那么你只需要将mysetup.py中的console=["helloworld.py"]替换为windows=["myscript.py"]既可。 py2exe一次能够创建多个exe文件,你需要将这些脚本文件的列表传递给console或windows 的关键字参数。如果你有几个相关联的脚本,那么这是很有用的。 运行下面个命令,将显示py2exe命令的所有命令行标记。 python mysetup.py py2exe --help

sprintf的用法详解

sprintf函数:sprintf函数的使用方法 疯狂代码 https://www.wendangku.net/doc/b517843352.html,/ ?:http:/https://www.wendangku.net/doc/b517843352.html,/BlogDigest/Article75531.html sprintf() 格式化输出函数(图形) 功能: 函数sprintf()用来作格式化的输出。 用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list); 说明: 函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函数将所要输出的格式送到第一个参数,然后显示输出。函数名: sprintf 功 ; 能: 送格式化输出到字符串中 用 ; 法: int sprintf(char *string, char *farmat [,argument,...]); 程序例:#include #include int main(void) { ; ; char buffer[80]; ; ; sprintf(buffer, "An approximation of Pi is %f\n", M_PI); ; ; puts(buffer); ; ; return 0; } sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕。sprintf的第一个参数应该是目的字符串,如果不指定这个参数,执行过程中出现 ; ; ; ; ;"该程序产生非法操作,即将被关闭...."的提示。 因为C语言在进行字符串操作时不检查字符串的空间是否够大,所以可能会出现数组越界而导致程序崩溃的问题。即使碰巧,程序没有出错,也不要这么用,因为早晚会出错。所以一定要在调用sprintf之前分配足够大的空间给buf。 ;由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中, 后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。所以本文着重介绍sprintf,有时 也穿插着用用pritnf。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... ); 除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数: 格式化字符串上。 printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的 格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终 函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。 格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。如: //把整数123 打印成一个字符串保存在s 中。

Cyapi使用心得

EZ-USB FX2(68013)Cyapi使用心得(1)--USB连接 2009-11-07 19:23 用Cyapi也有一阵了,这个确实比EZusb的api好用,简单说下Cyapi的使用心得,在编程中应该注意的一些问题,毕竟,说起来,那个CYapi 的说明文档讲的实在太简单了点,好多东西都讲得不明白,只能 在使用中自己慢慢积累了。 首先说下前提,固件架构是EZ-USB FX2/FX2LP(CY7C68013),编译环境VC++ 6.0,驱动是Cyusb.sys。 上位机简单说下,建立一个MFC 单文档/对话框应用程序;在路径项目中包含头文件cyapi.h和cyapi.lib所在的路径,最好移到最上面。然后手动导入cyapi.lib,注意是CV6_7的lib,不要导入BCB的。 下面讲得是按照USB一般工作流程来讲得。 (1)USB连接 1.首先要建立一个USB设备对象 文档里有说的了,copy一下 CCyUSBDevice *USBDevice = new CCyUSBDev(Handle); 括号中的Handle是USB所关联对象的句柄,一般在MFC中直接就是m_hwnd。 2.然后就该是打开USB设备了 可以用到两个函数open();isopen() 这两个都可以用来打开USB设备,isopen()还可以判断能否获得USB设备句柄 一般来说,如果只有一个USB设备连接,可以这样打开: USBDevice->open(0) //打开0号USB设备 如果要判断,可以: if(! USBDevice->open(0)) //打开失败 {messagebox("USB未连接");} 或者 if(!USBDevice->Isopen())

Python对Excel操作详解

Python对Excel操作 详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd、xlwt 和xlutils模块。另外还演示了如何通过Tcl tcom包对excel操作。 关键字: Python、Excel、xlrd、xlwt、xlutils、TCl、tcom

1Python简介 Python是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用縮进来定义语句块。 与Scheme、Ruby、Perl、Tcl等动态语言一样,Python具备垃圾回收功能,能够自动管理存储器使用。它经常被当作脚本语言用于处理系统管理任务和网络程序编写,然而它也非常适合完成各种高级任务。Python虚拟机本身几乎可以在所有的作业系统中运行。使用一些诸如py2exe、PyPy、PyInstaller之类的工具可以将Python源代码转换成可以脱离Python解释器运行的程序。 2Python安装 Python目前的版本已经更新到3.4.0,本文使用的版本为2.7.5,所有的版本都可以在python官网https://www.wendangku.net/doc/b517843352.html,/下载,至于2.x和3.x版本的具体区别也可以在官网查看。 从官网下载了python 2.7.5安装文件python-2.7.5.msi后,直接双击就可以安装python了,可以选择安装路径,我改为C:\Python2.7.5\了,然后一路next就完成安装了,安装完成后在C盘下就多了一个文件夹Python2.7.5。 Python也是一种实时交互语言,可以通过自带的IDLE编写python语句并反馈回显信息,可以通过图1方式调出python IDLE。 图1

c语言关键字的用法详解

1. Static用法 1.1 static声明的变量在C语言中有两方面的特征: 1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 2)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。 1.2 特点 A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度; B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度; C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题; D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数) E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static 的局部变量的地址作为返回值,若为auto类型,则返回为错指针。 函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。 扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。 1.3 关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:

使用 PYTHON 开发 WINDOWS 桌面程序

使用python 开发windows 应用程序 本人以前一直用的是C++,MFC,毕业到了公司以后,公司用python做流程,我 顺便最近研究了一下用python开发windows 应用程序的整个流程,大体如下: 一、开发前期准备 1.boa-constructor-0.6.1.bin.setup.exe #一个wxWidges 的集成开发环境,简单如Delphi,可以直接拖拽控件,并且和其他集成环境不一样, #它不与集成开发环境的MainLoop冲突,用pythonwin,pyScripter都会冲突,典型 报错就是运行第二次 #程序的时候,直接导致 集成开发环境的强制退出,因为MainLoop冲突了 2.wxPython2.8-win32-unicode-2.8.10.1-py26.exe #wxPython库,提供了用C++写的 windows 组件库wx 3.py2exe-0.6.9.win32-py2.6.exe #打包发布工具,将python写的windows 程序或控 制台程序直接打包成exe 可执行文件,供用户使用 上述三个软件都是基于python2.6的,软件版本一定要配套,因为他们默认的安装路径和python版本有关系,否则会找不到相关库的存在。 二、开发 软件安装完以后,打开BOA,哇塞,拖控件真简单,而且属性啥的和Dephi差 不多,你只要改改属性,代码会自动生成,它生成的控件很漂亮,记得以前用C++6.0开发软件的时候,那个控件真丑,都需要我重新用控件库去绑定优化, 现在不用了~BOA生成的控件,视觉效果相当好~开发软件速度相当快,再也 不用为了软件界面而写太多代码,也不用为了生成一个小程序而生成了很多的 文件,python开发的程序,没有多余的文件,而且文件很小。 三、发布 很多人都想在自己的软件程序写好以后,发布给其他人使用,一方面不希望自 己的代码泄露,一方面以此显出一点成就感,呵呵,可以使用py2exe将你的windows 程序打包发布了!当然,首先你得写个如下的setup.py文件: 代码 1 from distutils.core import setup 2 import py2exe 3 includes = ["encodings", "encodings.*"] 4 options = {"py2exe": 5 { "compressed": 1, 6 "optimize": 2, 7 "includes": includes, 8 "bundle_files": 1 9 } 10 } 11 setup( 12 version = "0.1.0",

常用转换函数汇总

1.计算CRC码(CRC16) 输入一个char数组以及数组的长度。数组长度包含CRC码。数组类似于“01 02 FA 03 A4…00 00”的格式,返回计算出的CRC码值,并存储到最后两位。次低位存储高字节,最低位存储低字节。 unsigned char* CMyCnComm::CalCRC(char buf[], int cnt) { unsigned char CRCHi=0x00,CRCLo=0x00,CRCGXHi=0x10,CRCGXLo=0x21; unsigned char ch; int j = 0; while( j < cnt-2) { ch = buf[j]; unsigned char BD; unsigned short i; bool sCF,lCF,hCF; BD=ch; sCF=false; lCF=false; hCF=false; for(i=0;i<8;i++) { if((BD&0x80)==0x80)sCF=true; if((CRCHi&0x80)==0x80)hCF=true; if((CRCLo&0x80)==0x80)lCF=true; CRCLo=CRCLo<<1; CRCHi=CRCHi<<1; if(lCF)CRCHi=CRCHi|0x01; if(sCF!=hCF) { CRCHi=CRCHi^CRCGXHi; CRCLo=CRCLo^CRCGXLo; } BD=BD<<1; sCF=false; lCF=false; hCF=false; } j++; } unsigned char *crcResult = new unsigned char[2]; crcResult[0] = CRCHi; crcResult[1] = CRCLo return crcResult; }

UVB使用方法与详解

UVB使用方法与详解 1.使用剂量 具体操作步骤:先用几天每天一次照射来找到每个人的亚红斑量剂量,方 法是第一次每个部位都先照射60秒左右,脸可以40开始,照射后并等第2天是皮肤反应的时候,如果皮肤不红就递增10到20秒,第二天再看皮肤反应直到能出现红润色皮肤症状就是你需要的治疗时间,基本上以后就是红——几天后红消退后照射——第2天红——几天后红消退后循环照射的治疗过程了,具体治疗中还需要注意细节,请自己看以下说明。 当找到能红的时间就进入治疗期,第一次使用的时候,必须从最小的能红 的量使用,然后逐渐增大;一周三次就足够了。但是,这里有一个重要的细节要指出:绝对不是每次都一定要比上次增加一个单位量(10秒左右)。是否增加,完全取决于你的皮肤的承受力。那么如何判断皮肤是否需要加量了呢。 一般来说,正常的、有效的照射后,皮肤的感受是“在照射后8个小时到 一天开始微微发痒,皮肤有点微红”(注意,都是“微”,而不是很痒,很红)。当你是这种感觉的时候,表明你的皮肤对于当前量是能够承受的,并且是有反 应的。因此,当你等2到3天后红消退第二次使用的时候,仍然保持这个量,而不要加量。如果你下次皮肤在照射以后,仍然微微发痒,有点微红,那么说 明依然有效,你第三次还应该坚持这个量。如果这次皮肤没有反应了,即不痒 不红,那么就说明量不够了;那么第三次就应该增加一个单位的使用量。用量

逐渐增加,假如长期好几个月治疗甚至半年后可能增加到好几分钟甚至15-20 分钟的时候,就不要再增加了,因为按照临床大夫来说,这是上限了。当然这 个15到20分钟是说的极限,是最大量,假如长期能在几十秒、几分钟内能每次正常反应是不会使用到最大量的。注意牛皮癣每次用时间比白癜风要多的多,可以80起步,每次加30秒,以皮肤红,有点疼为准。 假如不小心没有把握好照多了时间起泡也不要紧,很快会恢复,这就是有 些病人理解的光疗不好控制,容易起泡的说法,其实仅仅是医院里按死板的方 法加上去不考虑皮肤的耐力。从红到起泡还有一个时间跨度缓冲时间段,所以 按标准来治疗不会产生照射过量的问题,万一自己照多了可以摸点红霉素软膏,照多了起泡也不是大问题,有些机构还故意让起泡,来加快色素的生成,只是 绝大部分人不能忍受这个过程。照射的每次稍微红和很红到起泡都有效果,起 泡后生成色素快点,但是不让皮肤起泡总效果是一样的。 连续照射多次后会产生掉皮现象是正常的,掉皮后可能需要减一个数量级,牛皮癣可以不减少量。当你感觉一个阶段内每次照射后皮肤反应比较足就可以 适当在随后的几次照射减少治疗频率让两次照射间隔时间长点,目的给皮肤一 个恢复的过程,然后再治疗频率再密集点,然后再减少,让皮肤在中间产生一 个恢复的机会。使用过程中出现了治疗中断。比如出差,中断了2个星期。此时,当你继续治疗的时候,必须适度减量。因为停止使用一段时间会导致皮肤 的耐受能力下降,如果还保持中断前的量,可能会导致皮肤无法承受而受到损

C语言中常用的库函数

字符处理函数 本类别函数用于对单个字符进行处理,包括字符的类别测试和字符的大小写转换 头文件ctype.h 函数列表<> 函数类别函数用途详细说明 字符测试是否字母和数字isalnum 是否字母isalpha 是否控制字符iscntrl 是否数字isdigit 是否可显示字符(除空格外)isgraph 是否可显示字符(包括空格)isprint 是否既不是空格,又不是字母和数字的可显示字符ispunct 是否空格isspace 是否大写字母isupper 是否16进制数字(0-9,A-F)字符isxdigit 字符大小写转换函数转换为大写字母toupper 转换为小写字母tolower 地区化 本类别的函数用于处理不同国家的语言差异。 头文件local.h 函数列表 函数类别函数用途详细说明 地区控制地区设置setlocale 数字格式约定查询国家的货币、日期、时间等的格式转换localeconv 数学函数 本分类给出了各种数学计算函数,必须提醒的是ANSI C标准中的数据格式并不符合IEEE754标准,一些C语言编译器却遵循IEEE754(例如frinklin C51) 头文件math.h 函数列表 函数类别函数用途详细说明 错误条件处理定义域错误(函数的输入参数值不在规定的范围内) 值域错误(函数的返回值不在规定的范围内) 三角函数反余弦acos 反正弦asin

反正切atan 反正切2 atan2 余弦cos 正弦sin 正切tan 双曲函数双曲余弦cosh 双曲正弦sinh 双曲正切tanh 指数和对数指数函数exp 指数分解函数frexp 乘积指数函数fdexp 自然对数log 以10为底的对数log10 浮点数分解函数modf 幂函数幂函数pow 平方根函数sqrt 整数截断,绝对值和求余数函数求下限接近整数ceil 绝对值fabs 求上限接近整数floor 求余数fmod 本分类函数用于实现在不同底函数之间直接跳转代码。头文件setjmp.h io.h 函数列表 函数类别函数用途详细说明 保存调用环境setjmp 恢复调用环境longjmp 信号处理 该分类函数用于处理那些在程序执行过程中发生例外的情况。 头文件signal.h 函数列表 函数类别函数用途详细说明 指定信号处理函数signal 发送信号raise 可变参数处理 本类函数用于实现诸如printf,scanf等参数数量可变底函数。

(精华版)_stprintf_s和_stscanf_s函数与UNICODE编码

版权所有。转载请注明出处。 _stprintf_s和_stscanf_s函数与UNICODE编码 一、核心内容 ?该文档适用于微软的visual C++ 平台。 ?需要头文件: ?MSDN上对stprintf_s和_stscanf_s函数的定义: TCHAR.H routine _UNICODE & _MBCS not defined _MBCS defined _UNICODE defined _stprintf_s sprintf_s sprintf_s swprintf_s _stscanf_s sscanf_s sscanf_s swscanf_s 对应的代码为: #ifdef UNICODE #define _stprintf_s swprintf_s #else #define _stprintf_s sprintf_s ?前面的t表示编码,后面的_s表示检查内存溢出,前面的_表示非标准库函数。 ?从上我们可以看出,_stprintf_s和_stscanf_s是为适应不同编码而定义的两个宏,在不同的编码环境下他们所表示的函数是不同的。 ?_s是security的意思,具体含义参见后面的Security Remarks部分。 (1)int sprintf_s( char *buffer, size_t sizeOfBuffer, const char *format [, argument] ... ); //ANSI版本 int swprintf_s(wchar_t *buffer, size_t sizeOfBuffer, const wchar_t *format [,argument]...); //UNICODE版本

sprintf函数在LCD中使用

#include//包含sprintf函数对于LCD1602/LCD12864显示数字很有用float temperature; char displaytemp[16];//定义显示区域临时存储数组 temperature=(float)temp*0.0625; sprintf(displaytemp,"Temp % 7.3f",temperature);//打印... //sprintf函数功能:把格式化的数据写入某个字符串 //%[指定参数][标识符][宽度][.精度]指示符 //1. 处理字符方向。负号时表示从后向前处理。 //2. 填空字元。0 的话表示空格填0;空格是内定值,表示空格就放着 //3. 字符总宽度。为最小宽度。 //4. 精确度。指在小数点后的浮点数位数 // %% 印出百分比符号,不转换。 // %c 整数转成对应的 ASCII 字元。 // %d 整数转成十进位。 // %f 倍精确度数字转成浮点数。 // %o 整数转成八进位。 // %s 整数转成字符串。 // %x 整数转成小写十六进位。 // %X 整数转成大写十六进位。 LCD_Write_String(0,1,displaytemp);//显示 还有一种显示数字法:show[i]=time_buf1[j]/10+'0';//加上'0'是将数字转成字符 STC12C5A60S2 传统8051单片机执行I/O口操作,由高变低或由低变高,以及读外部状态都是12个时钟,而现在STC12系列单片机执行相应的操作是4个时钟。传统8051单片机如果对外输出为低,直接读外部状态是读不对的。必须先将I/O口置高才能够读对,而传统8051单片机由低变高的指令是12小时钟,该指令执行完成后,该I/O口也确定已变高。故可以紧跟着由低变高的指令后面,直接执行读该I/O口状态指令。而STC12系列单片机由于执行由低变高的指令是4个时钟,太快了,相应的指令执行完以后,I/0口还没有变高,要再过一个时钟之后,该I/O口才可以变高。故建议此状况下增加2个空操作延时指令再读外部品的状态。 最新STC12系列单片机I/O口的灌电流是20mA,驱动能力超强,驱动大电流时,不容易烧坏. 传统STC89Cxx系列单片机I/O口的灌电流是6mA,驱动能力不够强,不能驱动大电流,建议使用STC12系列.

使用 PYTHON 开发 WINDOWS桌面程序

使用python 开发windows 应用程序12312412512312 本人以前一直用的是C++,MFC,毕业到了公司以后,公司用python做流程,我 顺便最近研究了一下用python开发windows 应用程序的整个流程,大体如下: 一、开发前期准备 1.boa-constructor-0.6.1.bin.setup.exe #一个wxWidges 的集成开发环境,简单如Delphi,可以直接拖拽控件,并且和其他集成环境不一样, #它不与集成开发环境的MainLoop冲突,用pythonwin,pyScripter都会冲突,典型 报错就是运行第二次 #程序的时候,直接导致 集成开发环境的强制退出,因为MainLoop冲突了 2.wxPython2.8-win32-unicode-2.8.10.1-py26.exe #wxPython库,提供了用C++写的 windows 组件库wx 3.py2exe-0.6.9.win32-py2.6.exe #打包发布工具,将python写的windows 程序或控 制台程序直接打包成exe 可执行文件,供用户使用 上述三个软件都是基于python2.6的,软件版本一定要配套,因为他们默认的安装路径和python版本有关系,否则会找不到相关库的存在。 二、开发 软件安装完以后,打开BOA,哇塞,拖控件真简单,而且属性啥的和Dephi差 不多,你只要改改属性,代码会自动生成,它生成的控件很漂亮,记得以前用C++6.0开发软件的时候,那个控件真丑,都需要我重新用控件库去绑定优化, 现在不用了~BOA生成的控件,视觉效果相当好~开发软件速度相当快,再也 不用为了软件界面而写太多代码,也不用为了生成一个小程序而生成了很多的 文件,python开发的程序,没有多余的文件,而且文件很小。 三、发布 很多人都想在自己的软件程序写好以后,发布给其他人使用,一方面不希望自 己的代码泄露,一方面以此显出一点成就感,呵呵,可以使用py2exe将你的windows 程序打包发布了!当然,首先你得写个如下的setup.py文件: 代码 1 from distutils.core import setup 2 import py2exe 3 includes = ["encodings", "encodings.*"] 4 options = {"py2exe": 5 { "compressed": 1, 6 "optimize": 2, 7 "includes": includes, 8 "bundle_files": 1 9 } 10 } 11 setup( 12 version = "0.1.0",

【最新推荐】c语言sprintf实现原理-范文模板 (17页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == c语言sprintf实现原理 篇一:C语言机械原理编程,连杆运动分析图线 编程大作业 基于C语言的机械原理分析图: 只有库函数包含头文件:graphics.h conio.h 才能观看该程序效果; 若已经安装VC++,可以打开文件夹里面的EasyX压缩包,并安装EasyX文件,也可以观看程序效果; 一、角度与l3与角1的关系; #include #include #include #include #define SZ 2 #define PI 3.1415926 float c[SZ][SZ]={0}; void danwei() { char s[5];

int i=0; int k=-5; while(k<=600) { sprintf(s, "%d", i); outtextxy(k, 5, s); k+=75; i+=45; } outtextxy(280,25, "θ1/度"); } void danwei2() { char s[10]; float i=-0.1; int k=-10; while(k>=-400) { sprintf(s,"%0.2f",i); outtextxy(610,k,s); k-=40; i+=0.05; } outtextxy(610,-420, "l3/m/s");

} void danwei1() { char s[10]; int i=-60; int k=-10; while(k>=-400) { sprintf(s,&q uot;%d",i); outtextxy(-30,k,s); k-=20; i+=10; } outtextxy(-85,-420, "θ2、θ3/度"); } int main() { // 创建大小为 800 * 600 的绘图窗口 initgraph(800, 600); // 设置原点 (0, 0) 为屏幕中央(Y轴默认向下为正)setorigin(100, 500); // 使用白色填充背景 setbkcolor(WHITE);

相关文档