C语言语法参考大全(常用函数03)
--------------------------------------------------------------------------------
函数名: malloc
功 能: 内存分配函数
用 法: void *malloc(unsigned size);
程序例:
#include
#include
#include
#include
int main(void)
{
char *str;
/* allocate memory for string */
/* This will generate an error when compiling */
/* with C++, use the new operator instead. */
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer");
exit(1); /* terminate program if out of memory */
}
/* copy "Hello" into string */
strcpy(str, "Hello");
/* display string */
printf("String is %s", str);
/* free memory */
free(str);
return 0;
}
printf函数
其功能是向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。
(1) printf函数的一般形式为:
printf (格式控制字符串,变量1,变量2,…);
格式控制字符串与scanf中的相同。printf函数的第二个及以后的各个参数(若有的话)是变量的名字,而不是变量的地址,因此与scanf的相应参数有所不同。数组名可直接出现在printf的变量位置上,作为printf的参量,是合法的。
与scanf函数一样,printf中的格式说明也是针对不同类型的数据用不同的格式说明。
(2) printf函数中的格式说明:
① d格式说明。用来输出十进制整数,有下列几种用法:
? %d,按整数型数据的实际长度输出,如
printf("%d",123456);
输出:123456
? %md,m 为指定的输出字段的宽度,如果实际数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。例:
printf("%4d,%4d,%4d",a,b,c);
若a = 123,b = 12345,c = 578,则输出为:
?123,12345,?578
? %ld, 输出长整型数据。如:
long a = 135970;
printf("%ld",a);
输出:135970。如果用%d输出,就会发生错误,对long型数据,应当用%ld格式输出。对长整型数据也可以指定字段宽度,如将上面的printf函数中的"%ld"改为"%8ld",则输出为:
??135970
8列
一个int型数据既可以用%d也可用%ld格式输出。如:
int a = 123;
printf("%ld",123);
输出:123
②o格式符,以八进制数形式输出整数,由于是将内存单元中各位的值(0或1)按八进制的形式输出,因此输出的数据不带符号,即将符号位也作为八进制数的一部分一起输出。例如,-1在内存中的存放形式(以补码存放)为:1 1 11 11 11 11 1111 11,所以有:
int a =-1;
printf("%d,%o",a,a);
这段小程序的输出为:-1,177777。
可见,%o格式说明的输出是将内存中的0、1串按从右到左3位一组的八进制数输出的,不带负号。对于长八进制数可用“%lo”的格式输出。同样也可以指定输出的宽度,如:
printf("%9o",a)的输出数据为:???177777。
③x格式符,以十六进制数形式输出整数,与o格式类似,也可不输出负号。因此有:
int a =-1;
printf("%d,%o,%x",a,a,a);
的输出结果为: -1,177777,ffff
可见,%x格式说明的输出是将内存中的0、1串按从右到左4位一组的十六进制数输出的。也可以用“%lx”输出长整数,及用“%mx”,如“%12x”输出指定字段宽的整数。
④u格式符,用来输出无符号型(unsigned型)数据,以十进制形式输出。
一个无符号型(unsigned型)数据也可以用“%d”格式输出,一个有符号型(int型)数据也可以用“%u”格式输出。具体的输出值按相互赋值的规则处理。无符号型(unsigned型)数据也可以用“%o”或“%x”格式输出。
例2.10
main()
{unsigned int a = 65535;
int b =-2;
printf("a = %d,%o,%x,%u
",a,a,a,a);
printf("b = %d,%o,%x,%u
",b,b,b,b);
}
运行结果为:
a =-1,177777,ffff,65535
b =-2,177776,fffe,65534
注意:上例中65535在内存中的表示(16位)为:11 11 11 11 11 11 11 11;
⑤ c格式说明。
? %c格式,用来输出一个字符。例:
char ch =a;
printf("%c",ch);
输出字符a。
一个整数,只要它的值在0~255之间,就可以用字符形式输出。在输出前,将该整数转换成相应的ASCII码字符。反之,一个字符数据也可以用整数形式输出。
例2.11
main()
{ char c1 = a;
int i = 97;
printf("%c,%d
",c1,c1);
printf("%c,%d
",i,i);
}
输出结果为:
a,97
a,97
? %mc格式用于指定输出字符宽度,如果有:
printf("%3c",c1);则输出:??a,即c变量输出占3列,前两列补空格。
⑥s格式说明。s格式用来输出一个字符串。有以下几种用法:
? %s,例如:
printf("%s","CHINA");输出:CHINA。
? %ms,输出的字符串占m列,如果字符串本身长度大于m,则突破m限制,将字符串全部输出。若串小于m,则左边补空格。例如:
printf("%7s","CHINA");输出:??CHINA
fprintf格式printf("%3s","CHINA");则突破输出宽度输出:CHINA
? %-ms,如果小于m列,则在m列范围内,字符串向左靠,右边补空格。例:
printf("%-7s","CHINA");输出:CHINA??
printf("%-3s","CHINA");突破输出宽度输出:CHINA??
? %m.ns,输出占m列,但只
取字符串中左边n个字符输出。这n个字符输出在m列的右侧,左补空格。例:
printf("%7.3s","CHINA");输出:????CHI。
? %-m.ns,其中m和n所表示的意义同④,但n个字符输出在m列范围内的左侧,右补空格。如果n>m,则m自动取n的值,以保证n个字符自动正常输出。例:
printf("%-2.3s","CHINA");输出:CHI
⑦f格式说明。f格式用来输出带小数点的单、双精度实数。有下列几种用法:
? %f不指定字段宽度,由系统自动输出相应常量或变量的全部整数部分及6位小数。应注意,单精度实数输出时,有效数字位数一般为7位。而双精度实数输出时,有效数字位数一般为十六位,有6位小数位。
例2.12
main()
{float x,y;
double u,v;
x = 111111.111;y = 222222.222;
u = 1111111111111.111111111;
v = 2222222222222.222222222;
printf("%f
",x+y);
printf("%f
",u+v);
}
运行结果为:
333333.328125
3333333333333.333010
可以看出,输出结果中前一个只有前7位数字是有效数字,而后一个则前16位数字是有效数字。其他位均无意义。
? %m.nf 指定输出的数值共占m位,其中有n位小数。若数值长度小于m,则左端补空格。若数值长度大于m,则按实际数值输出,小数位保留n位。
例:printf("%7.3f",23.456);
输出:’23.456
printf("%7.3",1123.456);
输出:1123.456
? %-m.nf与%m.nf基本相同,只是使输出数值向左端靠,右端补空格。例:
printf("%-10.3f",1111.1111);
输出:1111.111??
⑧e格式符。以指数形式输出实数。可用以下形式:
? %e不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出6位小数,指定部分占5列(如e+003),其中:“e”占一位,指数的符号占一位,指数占三位。数值按标准化指数形式输出(即小数点前必须有且仅有一位非零数字)。例如:
printf("%e",1234.56);
输出: 1.234560e+003。也就是说,用%e格式输出的实数共占13列字符宽度。
8列 5列
? %m.ne和%-m.ne,其中n指尾数部分的小数位数。m为整个数值输出所至少占有的宽度。当未指定n时,自动使n = 6,整个数据占13列输出,可能会突破m的限制,而按实际长度输出。
例:printf("% 12.4e",1234.56);
输出:1.2346e+003(四舍五入)
⑨g格式说明。用来输出实数,它根据实数大小,自动选f格式或e格式(选择占宽度较小的一种输出),且不输出无意义的零。例如,若a = 123.456,则
printf("%f%e % g",a,a,a);
输出如下:
123.456000 1.234560e+002 123.456
用%f格式输出占10列。用%e格
式输出占13列,用%g格式时,自动从上面两种格式中选择较短者(今为%f格式为短),故占10列,且按%f格式用小数点形式输出,最后三个小数位“0”为无意义的0,不输出。%g格式用的较少。
puts 函数
函数名: puts
功 能: 送一字符串到流中
用 法: int puts(char *string);
程序例:
#include
int main(void)
{
char string[] = "This is an example output string";
puts(string);
return 0;
}
函数名: rectangle
功 能: 画一个矩形
用 法: void far rectangle(int left, int top, int right, int bottom);
程序例:
#include
#include
#include
#include
int main(void)
{
/
* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int left, top, right, bottom;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
left = getmaxx() / 2 - 50;
top = getmaxy() / 2 - 50;
right = getmaxx() / 2 + 50;
bottom = getmaxy() / 2 + 50;
/* draw a rectangle */
rectangle(left,top,right,bottom);
/* clean up */
getch();
closegraph();
return 0;
}
函数名: rewind
功 能: 将文件指针重新指向一个流的开头
用 法: int rewind(FILE *stream);
程序例:
#include
#include
int main(void)
{
FILE *fp;
char *fname = "TXXXXXX", *newname, first;
newname = mktemp(fname);
fp = fopen(newname,"w+");
fprintf(fp,"abcdefghijklmnopqrstuvwxyz");
rewind(fp);
fscanf(fp,"%c",&first);
printf("The first character is: %c",first);
fclose(fp);
remove(newname);
return 0;
}
scanf函数
(1) scanf函数的一般形式:
scanf(格式控制字符串,地址1,地址2,…);
格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:
① 格式说明符由“%”和格式字符组成,如%c,%d,%s,%f等。其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。格式说明以“%”字符为标志。
② 普通字符,是需要用户在输入时原样输入的字符。例如:
scanf("%d%d",&a,&b);
scanf("%f,%f",&x,&y);
都是合法的格式输入语句。但在键入数据时略有区别,请看下例:
main()
{ int a, b, c, d;
scanf("%d %d",&a,&b);
scanf("%d,%d",&c,&d);
printf("%d,%d,%d,%d
",a,b,c,d);
printf("%d %d %d %d",a,b,c,d);
}
运行时,按以下方式输入a,b,c,d的值:
3 4↙ 5,6↙
输出: 3,4,5,6
3 4 5 6
&a,&b,&c,&d中的&是取地址运算符,&a指a的地址。但要注意,上面的两个输入格式在输入时有所不同。“%d %d”表示按十进制整数形式输入两个数据。输入数据时,两个数据之间以一个或多个空格间隔,也可以用回车键,跳格键tab。下面的输入均合法:
? 3 4
? 3 ↙
4
? 3(按tab健)
4↙
但两个数据间不能用逗号等其他的字符。
而“%d,%d”亦表示按十进制输入两个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为间隔符,因此,上例中c和d的值的输入应按下列形式输入:
5,6
(2) scanf中可用的格式说明:
对应不同类型数据的输入,scanf的格式控制字符串中可以使用不同的格式字符构成不同的格式说明。常用的格式说明如下:
格式字符串 功能
%d 用来输入十进制整数,相应参数应为整数指针。
%o 用来输入八进制整数(前导零可有可无),相应参数应为整数指针。
%x 用来输入十六进制整数(前导零可有可无)。
%c 用来输入单个字符。
%s 用来输入字符串,将字符串送入一个字符数组中,在输入时以非
空白字符开始,以第一个空白字符结束。字符串以串结束标志
为其最后一个字符。
%f 用来输入一个浮点实数,可以用小数形式或指数形式输入。
%e 与%f的作用相同,e与f可以替换使用。
scanf附加的格式说明字符:
字符 说明
l 用于输入长整型数据,(可用%ld,%lo,%lx)以及双精度型数
据(如%lf或%le)。
h 用于输入短整型数据(可用%hd,%ho,%hx)。
域宽(为整数) 指定输入数据所占宽度(列数)。
* 表示本输入项在读入后不赋给任何相应的变量。
① 当指定输入数据所占列数后,系统将自动按它截取所需数据。如:
scanf("%3d %3d %3d",&a,&b,&c);
输入123456789↙,系统将自动地把123赋给a,456赋给b,789赋给c。
scanf("%3c",ch);
则可输入3个字符,但ch必须是字符数组或字符指针。
② %后的“*”附加说明符,用来跳过它相应的数据。例如:
scanf("%2d %*3d %2d",&a,&b
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论