c语言 求教puts和printf的区别。

#include"stdafx.h"#include"conio.h"#include<stdio.h>intmain(){charsza[1024],szb[512];... #include "stdafx.h"
#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却不行。
展开
 我来答
吉祥二进制
高粉答主

2015-05-27 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84576

向TA提问 私信TA
展开全部

  两者的区别在于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格式:输出指针地址

忘至白葬不情必0T
2012-01-23 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
怎么可能puts不能输出???
你这个程序的错误在于while(*p++)这句,跟用printf还是puts没什么关系.
while(*p++);后面要加一句p--;不然p指向的是原来的sza字符串的结束符的后一个字节位置.
更多追问追答
追问
不是吧。我两个语句都在上面,用printf就能输出,用puts就不行。而且while(*p++)最后指的就是结束符啊。
追答
while(*p++)是当p指向结束符时,循环条件不成立,结束循环.然后p的值加1,指向了结束符之后的一个字节.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rock_0125
2012-01-24 · 超过11用户采纳过TA的回答
知道答主
回答量:78
采纳率:100%
帮助的人:25.8万
展开全部
本来都可以的,但你是执行完puts(sza);后,指针已经移动到最后了,才执行的printf("%s",sza);当然什么也输不出来了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
焦博简03r
2012-01-23 · TA获得超过8785个赞
知道小有建树答主
回答量:1186
采纳率:0%
帮助的人:700万
展开全部
这个程序好乱啊,你要输出,干嘛用中间那两行,而且,判断条件应该是==吧
至于puts函数,应该是可以的,可能编译器应该出现问题在这之前吧,而不是puts函数问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式