永发信息网

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

答案:4  悬赏:0  手机版
解决时间 2021-03-06 03:41
  • 提问者网友:且恨且铭记
  • 2021-03-05 15:50
#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却不行。
最佳答案
  • 五星知识达人网友:大漠
  • 2021-03-05 16:47
两者的区别在于puts的功能更单一,只能输出字符串,而printf可以根据给定的格式输出多种类型的数据。


  1、puts()函数用来向标准输出设备(屏幕)写字符串并换行,其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针)。

1
2
3
4
5
6
7
#include <stdio.h>
intmain()
{
    charstring[] = "This is an example output string\n";
    puts(string);
    return0;
}



  2、printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
  printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。
  格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。
  示例:通过printf函数输出字符串、有符号整数、单精度浮点数、双精度浮点数。

1
2
3
4
5
6
#include<stdio.h>
intmain()
{
printf("%s\t%d%\t%f\t%e\n", "hello world", 1, 1.1f , 1.1);   
return0;
}

  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格式:输出指针地址
全部回答
  • 1楼网友:街头电车
  • 2021-03-05 18:45
这个程序好乱啊,你要输出,干嘛用中间那两行,而且,判断条件应该是==吧 至于puts函数,应该是可以的,可能编译器应该出现问题在这之前吧,而不是puts函数问题
  • 2楼网友:归鹤鸣
  • 2021-03-05 17:35
本来都可以的,但你是执行完puts(sza);后,指针已经移动到最后了,才执行的printf("%s",sza);当然什么也输不出来了
  • 3楼网友:舊物识亽
  • 2021-03-05 17:17
怎么可能puts不能输出??? 你这个程序的错误在于while(*p++)这句,跟用printf还是puts没什么关系. while(*p++);后面要加一句p--;不然p指向的是原来的sza字符串的结束符的后一个字节位置.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯