格式化输出

printf一系列函数能将各种不同类型的参数进行格式编排和输出,每个参数在输出流中的表现形式由格式参数format来控制,包含了需要输出的普通字符和转换控制符代码的字符串,转换控制符规定了其余参数的输出方式和输出地方

#include <stdio.h>

int printf(const char *format, ...);
int sprintf(char *s, const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);

printf函数将输出送到标准输出;sprintf函数将自己的输出和结尾空字符写到作为参数传递过来的字符串s中,这个字符串必须足够容纳所有的输出数据;fprintf函数将自己的输出送到一个指定的stream,通常是一个文件

sprintf和printf仅仅输出的目的地不同,一个是字符串一个是命令行标准输出,而sprintf函数可以将其它数据类型转换成字符串

#include <stdio.h>

int main(){
        char str[10];
        int a = 12345;
        float b = 1.2345;

        sprintf(str, "%d", a);
        printf("%s\n", str);

        sprintf(str, "%.4f", b);
        printf("%s\n", str);
        return 0;
}

lihui@2015 /cygdrive/d/work
$ gcc hello.c

lihui@2015 /cygdrive/d/work
$ ./a.exe
12345
1.2345

fprintf是用来文件操作的,将输出信息输出到指定的文件当中

#include <stdio.h>

int main(){
        char str[15] = "Hello World";
        FILE *out;
        out = fopen("lihui.txt", "w");
        if (out)
                fprintf(out, "%s\n", str);
        fclose(out);
        return 0;
}

lihui@2015 /cygdrive/d/work
$ ./a.exe

lihui@2015 /cygdrive/d/work
$ cat lihui.txt
Hello World

下面是转换控制符

%d, %i:以十进制格式输出一个整数
%o,%x:以八进制或十六进制格式输出一个整数
%c:输出一个字符
%s:输出一个字符串
%f:输出一个(单精度)浮点数
%e:以科学计数法格式输出一个双精度浮点数
%g:以通用格式输出一个双精度浮点数

在%可以跟一些数字,也就是字段限定符,来控制输出对齐的情况,比如下面例子:

#include <stdio.h>

int main(){
        char *a = "Hello World!";
        char *b = "Congratulations!";
        float c = 1.2345;

        printf("Right:\n");
        printf("%s\n", a);
        printf("%s\n", b);

        printf("\nLeft:\n");
        printf("%-s\n", a);
        printf("%-s\n", b);

        printf("\nSame Right:\n");
        printf("%20s\n", a);
        printf("%20s\n", b);

        printf("\nSame Left:\n");
        printf("%-20s\n", a);
        printf("%-20s\n", b);

        printf("\nRight:\n");
        printf("%20s\n", a);
        printf("%20s\n", b);
        printf("%20.4f", c);

        printf("\nRight:\n");
        printf("%*s\n", 20, a);
        printf("%*s\n", 20, b);
        printf("%*f\n", 20, c);

        return 0;
}

那么输出结果:

lihui@2015 /cygdrive/d/work
$ gcc hello.c

lihui@2015 /cygdrive/d/work
$ ./a.exe
Right:
Hello World!
Congratulations!

Left:
Hello World!
Congratulations!

Same Right:
        Hello World!
    Congratulations!

Same Left:
Hello World!
Congratulations!

Right:
        Hello World!
    Congratulations!
              1.2345
Right:
        Hello World!
    Congratulations!
            1.234500

发表回复