c语言 求教puts和printf的区别。
#include "conio.h"
#include <stdio.h>
int main()
{
char sza[1024], szb[512];
scanf("%s", sza);
scanf("%s", szb);
char *p = sza;
char *pb = szb;
while (*p++);
while (*p++ = *pb++);
puts(sza);
printf("%s", sza);
_getch();
}
为什么printf可以输出,puts却不行。 展开
两者的区别在于puts的功能更单一,只能输出字符串,而printf可以根据给定的格式输出多种类型的数据。
1、puts()函数用来向标准输出设备(屏幕)写字符串并换行,其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针)。
#include <stdio.h>
int main()
{
char string[] = "This is an example output string\n";
puts(string);
return 0;
}
2、printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。
格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。
示例:通过printf函数输出字符串、有符号整数、单精度浮点数、双精度浮点数。
#include<stdio.h>
int main()
{
printf("%s\t%d%\t%f\t%e\n", "hello world", 1, 1.1f , 1.1);
return 0;
}
3、printf控制字符的格式:
① d格式:用来输出十进制整数。有以下几种用法:
%d:按整型数据十进制的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。
② o格式:以无符号八进制形式输出整数。
%d:按整型数据八进制的实际长度输出。
%lo:对长整型可以用格式输出
%mo:指定字段宽度用格式输出
③ x格式:以无符号十六进制形式输出整数。
%x:按整型数据十六进制的实际长度输出。
%lx:对长整型可以用格式输出
%mx:指定字段宽度用格式输出
④ u格式:以无符号十进制形式输出整数。
%u:按无符号整型数据十进制的实际长度输出。
%lu:对长整型可以用格式输出
%mu:指定字段宽度用格式输出
⑤ c格式:输出一个字符。
⑥ s格式:用来输出一个串。有几中用法
%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
%ms:输出的字符串占m列,如字符串长度大于m,将字符串全部输出。若串长小于m,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。
⑦ f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
%f:不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
⑧ e格式:以指数形式输出实数。可用以下形式:
%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:m、n和”-”字符含义与前相同。
此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
⑨ p格式:输出指针地址
你这个程序的错误在于while(*p++)这句,跟用printf还是puts没什么关系.
while(*p++);后面要加一句p--;不然p指向的是原来的sza字符串的结束符的后一个字节位置.
不是吧。我两个语句都在上面,用printf就能输出,用puts就不行。而且while(*p++)最后指的就是结束符啊。
while(*p++)是当p指向结束符时,循环条件不成立,结束循环.然后p的值加1,指向了结束符之后的一个字节.
至于puts函数,应该是可以的,可能编译器应该出现问题在这之前吧,而不是puts函数问题