printf函数,fprintf函数,sprintf函数

本文详细介绍了C语言中的三种格式化输出函数:printf, fprintf和sprintf。printf函数用于向标准输出设备格式化输出信息,fprintf将格式化输出到指定流或文件,而sprintf则将格式化数据写入字符串缓冲区。文章列举了各种格式规定符的用法,并提供了函数范例。" 130980453,999793,STL算法详解:时序数据分解,"['算法', '数据处理', '统计学', '时序分析']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

printf
函数作用:格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
原型
extern int printf(const char *format,...);
用法

//以下程序用于获得输入值i,j并将其输出(i,j之间以逗号隔开)

#include<stdio.h>
int main()
{
    int i, j;
    scanf("%d, %d", &i, &j);
    printf("i=%d;j=%d", i, j);
    return 0;
}

规定输出数据的格式,具体如下:
type
type的字符用于规定输出数据的类型,含义如下:
字符 对应数据类型 含义
d / i int 接受整数值并将它表示为有符号的十进制整数,i是老式写法
o unsigned int 无符号8进制整数(不输出前缀0)
u unsigned int 无符号10进制整数
x / X unsigned int 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
f(lf) float(double) 单精度浮点数用f,双精度浮点数用lf(尤其scanf不能混用)
e / E double 科学计数法表示的数,此处”e”的大小写代表在输出时用的“e”的大小写
g / G double 有效位数,如:%8g表示单精度浮点数保留8位有效数字。双精度用lg
c char 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符
s / S char * / wchar_t * 字符串。输出字符串中的字符直至字符串中的空字符(字符串以’\0‘结尾,这个’\0’即空字符)
p void * 以16进制形式输出指针
n int * 到此字符之前为止,一共输出的字符个数,不输出文本
% 无输入 不进行转换,输出字符‘%’(百分号)本身

fprintf
函数作用:格式化输出到一个流/文件中;
函数原型:int fprintf( FILE *stream, const char *format, [ argument ]...),
fprintf()函数根据指定的格式(format)向输出流(stream)写入数据(argument)。
参数说明:FILE*stream:文件指针
const char* format:输出格式
[argument]:附加参数列表

规定符
%d, %i 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p指针的值
%e, %E 指数形式的浮点数
%x无符号以小写十六进制表示的整数
%X 无符号以大写十六进制表示的整数
%o 无符号以八进制表示的整数
%g 自动选择合适的表示法

函数范例

#include <stdio.h>
int main(void)
{
    FILE *in,*out;
    in = fopen("\\AUTOEXEC.BAT", "rt");
    if(in == NULL)
    {
        fprintf(stderr, "Can not open inputfile.\n");
        return 1;
    }
    out = fopen("\\AUTOEXEC.BAT", "wt");
    if(out == NULL)
    {
        fprintf(stderr, "Can not open outputfile.\n");
        return 1;
    }
    while(!feof(in))
        fputc(fgetc(in), out);
    fclose(in);
    fclose(out);
    return 0;
}

sprintf
功能:把格式化的数据写入某个字符串中。sprintf 是个变参函数。
原型

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

参数列表
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]…:可选参数,可以是任何类型的数据。
返回值
返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。
sprintf 返回被写入buffer 的字节数,结束字符‘\0’不计入内。即,如果“Hello”被写入空间足够大的buffer后,函数sprintf 返回5。[1]

注:使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了可能buffer溢出。解决这个问题,可以考虑使用 snprintf函数,该函数可对写入字符数做出限
sprintf格式的规格如下所示。[]中的部分是可选的。
%[指定参数][标识符][宽度][.精度]指示符
若想输出’%’本身时, 请使用’%%’处理。
1. 处理字符方向。负号时表示从后向前处理。
2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。
3. 字符总宽度。为最小宽度。
4. 精确度。指在小数点后的浮点数位数。
转换字符
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。

例子

#include <stdio.h>
int main( void )

{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;
   // 格式化并打印各种数据到buffer
   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

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

输出结果[1] :
Output:
String: computer
  
Character: l
Integer: 35
Real: 1.732053
character count = 79

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值