GVKun编程网logo

printf用法大全,C语言printf格式控制符一览表(c语言printf输出控制符)

16

对于printf用法大全,C语言printf格式控制符一览表感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍c语言printf输出控制符,并为您提供关于awk的输出格式控制:print和prin

对于printf用法大全,C语言printf格式控制符一览表感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍c语言printf输出控制符,并为您提供关于awk的输出格式控制:print 和printf、C中printf、sprintf和fprintf的区别(代码示例)、C语言 printf()函数的格式控制符、c语言 printf格式化输出的有用信息。

本文目录一览:

printf用法大全,C语言printf格式控制符一览表(c语言printf输出控制符)

printf用法大全,C语言printf格式控制符一览表(c语言printf输出控制符)

输入输出函数(printf 和 scanf)是C语言中非常重要的两个函数,也是学习C语言必学的两个函数。在C语言程序中,几乎没有一个程序不需要这两个函数,尤其是输出函数(printf),所以这两个函数必须要掌握。

如果在程序中要使用 printf 或者 scanf,那么就必须要包含头文件 stdio.h。因为这两个函数就是包含在该头文件中的。

输出函数的功能是将程序运行的结果输出到屏幕上,而输入函数的功能是通过键盘给程序中的变量赋值。可以说输入输出函数是用户和计算机交互的接口。其中 printf 的功能很强大,用法很灵活,比较难掌握;而 scanf 的用法相对比较固定,但也有很多需要注意的地方。

本节我们先讲解 printf 的用法,稍后再讲解 scanf。

printf 的格式

printf 函数的原型为:

# include <stdio.h>
int printf(const char *format,...);

在讲每一个函数的时候都会先把它的函数原型写出来,这个原型你们现在看不懂不要紧,等到学完C语言之后再来看这个原型就会发现它是很有参考意义的!它对深刻理解函数有着很大的价值。

printf 的格式有四种:

1) printf("字符串\n");

# include <stdio.h>
int main(void)
{
    printf("Hello World!\n");  // \n表示换行
    return 0;
}
其中\n表示换行的意思。它是一个转义字符,前面在讲字符常量的时候见过。其中 n 是“new line”的缩写,即“新的一行”。

此外需要注意的是,printf 中的双引号和后面的分号必须是在英文输入法下。双引号内的字符串可以是英文,也可以是中文。

2) printf("输出控制符",输出参数);

# include <stdio.h>
int main(void)
{
    int i = 10;
    printf("%d\n",i);  /*%d是输出控制符,d 表示十进制,后面的 i 是输出参数*/
    return 0;
}
这句话的意思是将变量 i 以十进制输出。

那么现在有一个问题:i 本身就是十进制,为什么还要将 i 以十进制输出呢?

因为程序中虽然写的是 i=10,但是在内存中并不是将 10 这个十进制数存放进去,而是将 10 的二进制代码存放进去了。计算机只能执行二进制 0、1 代码,而 0、1 代码本身并没有什么实际的含义,它可以表示任何类型的数据。所以输出的时候要强调是以哪种进制形式输出。所以就必须要有“输出控制符”,以告诉操作系统应该怎样解读二进制数据。

如果是%x就是以十六进制的形式输出,要是%o就是以八进制的形式输出,大家自己试一下。

3) printf("输出控制符1 输出控制符2…",输出参数1,输出参数2,…);

# include <stdio.h>
int main(void)
{
    int i = 10;
    int j = 3;
    printf("%d %d\n",i,j);
    return 0;
}
输出控制符 1 对应的是输出参数 1,输出控制符 2 对应的是输出参数 2……编译、链接、执行后我们看一下输出结果:
10 3

注意一下,为什么 10 和 3 之间有一个空格?因为上面 %d 和 %d之间有空格,printf 中双引号内除了输出控制符和转义字符\n外,所有其余的普通字符全部都原样输出。比如:
# include <stdio.h>
int main(void)
{
    int i = 10;
    int j = 3;
    printf("i = %d,j = %d\n",j);
    return 0;
}
这时我们再编译、链接、执行一下:
i = 10,j = 3

i=,、空格和j=全都原样输出了。此外需要注意的是:“输出控制符”和“输出参数”无论在“顺序上”还是在“个数上”一定要一一对应。

4) printf("输出控制符 非输出控制符",输出参数);

这实际上就是上面那个例子。这时候会有一个问题:到底什么是“输出控制符”,什么是“非输出控制符”?很简单,凡是以%开头的基本上都是输出控制符。

输出控制符

常用的输出控制符主要有以下几个:
控制符 说明
%d 按十进制整型数据的实际长度输出。
%ld 输出长整型数据。
%md m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。
%u 输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。但编程的时候最好不要这么写,因为这样要进行一次转换,使 cpu 多做一次无用功。
%c 用来输出一个字符。
%f 用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入。
%.mf 输出实数时小数点后保留 m 位,注意 m 前面有个点。
%o 以八进制整数形式输出,这个就用得很少了,了解一下就行了。
%s 用来输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这个稍后再讲。
%x(或 %X 或 %#x 或 %#X) 以十六进制形式输出整数,这个很重要。

%x、%X、%#x、%#X 的区别

一定要掌握 %x(或 %X 或 %#x 或 %#X),因为调试的时候经常要将内存中的二进制代码全部输出,然后用十六进制显示出来。下面写一个程序看看它们四个有什么区别:
# include <stdio.h>
int main(void)
{
    int i = 47;
    printf("%x\n",i);   
    printf("%X\n",i);   
    printf("%#x\n",i);   
    printf("%#X\n",i);   
    return 0;
}
在 VC++ 6.0 中的输出结果:
2f
2F
0x2f
0X2F

从输出结果可以看出:如果是小写的x,输出的字母就是小写的;如果是大写的X,输出的字母就是大写的;如果加一个#,就以标准的十六进制形式输出。

最好是加一个#,否则如果输出的十六进制数正好没有字母的话会误认为是一个十进制数呢!总之,不加#容易造成误解。但是如果输出 0x2f 或 0x2F,那么人家一看就知道是十六进制。而且%#x%#X中,笔者觉得大写的比较好,因为大写是绝对标准的十六进制写法。

如何输出 %d、\ 和双引号

printf 中有输出控制符%d,转义字符前面有反斜杠\,还有双引号。那么大家有没有想过这样一个问题:怎样将这三个符号通过 printf 输出到屏幕上呢?

要输出%d只需在前面再加上一个%,要输出\只需在前面再加上一个\,要输出双引号也只需在前面加上一个\即可。程序如下:
# include <stdio.h>
int main(void)
{
    printf("%%d\n");
    printf("\\\n");
    printf("\"\"\n");
    return 0;
}
在 VC++ 6.0 中的输出结果是:
%d
\
""

小结

printf 是C语言中非常重要的一个函数。经过上面的学习我们发现,其实它并不难。只要多编程多练习,很快就能掌握。

其次学完本节之后要知道为什么需要“输出控制符”。因为计算机中所有的数据都是二进制 0、1 代码,所以输出的时候要用“输出控制符”告诉计算机以什么形式将二进制数据显示出来。

输出控制符中,%d、%f、%s、%c 是最常用的,它们分别是输出整数、实数、字符串和字符的控制符。%.mf 虽然用得不多,但一定要重视。

最后 %x、%X、%#x、%#X 四种用法的区别只需要了解一下即可。

awk的输出格式控制:print 和printf

awk的输出格式控制:print 和printf

1.两个函数和若干个内部变量控制awk的输出格式:

两个函数:print和printf

内部变量:OFS:输出的列间隔符,默认为tab;  ORS:输出的行间隔符,默认为\n

printf更加自由化,一切输出格式都需要自己定义。

print是定义好的printf,通过内部变量能改变已经定义好的格式。

 

2.printf的用法:

格式:printf "格式化",变量1,变量2

格式化内容:

1.数据格式

   十进制整数:%d

   科学计数法显示数字:%e

   浮点数:%f

   字符串:%s

   ASCII码:%c

2.换行,空格等

   换行:\n

   空格:\t

3.对齐

   左对齐:“-”,默认右对齐。

 

shell@ubuntu:~/test$ echo 15|awk ''{printf ("d:%15d\nf:%10.2f\ns:%5s",$0,$0,$0)}''
d:             15
f:     15.00
s:   15

shell@ubuntu:~/test$ echo 15|awk ''{printf ("d:|%-15d|\nf:%10.2f\ns:%5s",$0,$0,$0)}''
d:|15             |
f:     15.00
s:   15


 

C中printf、sprintf和fprintf的区别(代码示例)

C中printf、sprintf和fprintf的区别(代码示例)

本篇文章主要给大家介绍c语言中printf、sprintf和fprintf的区别,希望对需要的朋友有所帮助!

printf:

printf函数用于在stdout(标准输出)控制台打印字符流数据。

语法:

int printf(const char* str, ...);
登录后复制

示例:

#include<stdio.h> 
int main() 
{ 
   printf("hello geeksquiz"); 
   return 0; 
}
登录后复制

输出:

hello geeksquiz
登录后复制

sprintf:

语法:

int sprintf(char *str, const char *string,...);
登录后复制

sprintf用于将格式化文本(字符串/字符流)打印到字符串缓冲区上。

示例:

#include<stdio.h> 
int main() 
{ 
    char buffer[50]; 
    int a = 10, b = 20, c; 
    c = a + b; 
    sprintf(buffer, "Sum of %d and %d is %d", a, b, c); 
    printf("%s", buffer); 
  
    return 0; 
}
登录后复制

输出:

Sum of 10 and 20 is 30
登录后复制

fprintf:

fprintf用于在文件中打印字符串内容,但不在stdout(标准输出)控制台上打印。

int fprintf(FILE *fptr, const char *str, ...);
登录后复制

示例:

#include<stdio.h> 
int main() 
{ 
    int i, n=2; 
    char str[50]; 
  
    FILE *fptr = fopen("sample.txt", "w"); 
    if (fptr == NULL) 
    { 
        printf("Could not open file"); 
        return 0; 
    } 
  
    for (i=0; i<n; i++) 
    { 
        puts("Enter a name"); 
        gets(str); 
        fprintf(fptr,"%d.%s\n", i, str); 
    } 
    fclose(fptr); 
  
    return 0; 
}
登录后复制
输入: GeeksforGeeks
       GeeksQuiz
输出:  sample.txt file now having output as 
0. GeeksforGeeks
1. GeeksQuiz
登录后复制

相关推荐:《C教程》

以上就是C中printf、sprintf和fprintf的区别(代码示例)的详细内容,更多请关注php中文网其它相关文章!

C语言 printf()函数的格式控制符

C语言 printf()函数的格式控制符

C语言中,printf()函数针对输出不同的数据类型,有不同的格式控制符,此处汇总了一些常用的格式控制符:

  • %hd用来输出 short int 类型,hd 是 short decimal 的简写;
  • %d用来输出 int 类型,d 是 decimal 的简写;
  • %ld用来输出 long int 类型,ld 是 long decimal 的简写。
  • %c:输出一个字符。c 是 character 的简写。
  • %s:输出一个字符串。s 是 string 的简写。
  • %f:输出一个小数。f 是 float 的简写。

 

在输出整数方面,格式控制符和整数的符号是紧密相关的,具体就是:

  • %d 以十进制形式输出有符号数;
  • %u 以十进制形式输出无符号数;
  • %o 以八进制形式输出无符号数;
  • %x 以十六进制形式输出无符号数。

printf函数并不支持“输出负的八进制或者十六进制数”。

下表总结了不同类型的整数,以不同进制的形式输出时对应的格式控制符(--表示没有对应的格式控制符)

  short int long unsigned short unsigned int unsigned long
八进制 -- -- -- %ho %o %lo
十进制 %hd %d %ld %hu %u %lu
十六进制 -- -- -- %hx 或者 %hX %x 或者 %X %lx 或者 %lX

对于一个有符号的正数,它的符号位是0,当按照无符号数的形式读取时,符号位就变成了数值位,但是该位恰好是0而不是1,因此,用%o或者%x输出,不会有影响;

如果一个有符号整数是负数,这时候用%o或者%x输出,则结果就会大相径庭。

可以说,“有符号正数的最高位是0”这个巧合才使得%o和%x输出有符号数时不会出错

 

小数的输出格式:

  • %f 以十进制形式输出float类型;
  • %lf 以十进制形式输出double类型;
  • %e 以指数形式输出float类型,输出结果中的 e 小写;
  • %E 以指数形式输出float类型,输出结果中的 E 大写;
  • %le 以指数形式输出double类型,输出结果中的 e 小写;
  • %lE 以指数形式输出double类型,输出结果中的 E 大写。

下面有一段演示代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
    float a = 0.302;
    float b = 128.101;
    double c = 123;
    float d = 112.64E3;
    double e = 0.7623e-2;
    float f = 1.23002398;
    printf("a=%e \nb=%f \nc=%lf \nd=%lE \ne=%lf \nf=%f\n", a, b, c, d, e, f);
   
    return 0;
}

输出结果为:

a=3.020000e-01
b=128.100998
c=123.000000
d=1.126400E+05
e=0.007623
f=1.230024

对代码的说明:

  • %f 和 %lf 默认保留六位小数,不足六位以 0 补齐,超过六位按四舍五入截断
  • 将整数赋值给 float 变量时会变成小数
  • 以指数形式输出小数时,输出结果为科学计数法;也就是说,尾数部分的取值为:0 ≤ 尾数 < 10。
  • b的输出有点让人不理解,明明初始化的时候,只有三位小数,为什么不能精确输出呢?这和小数在内存中的存储形式有关,很多简单的小数压根不能精确存储,所以也就不能精确输出

另外,小数还有一种更加只能的输出方式,就是使用%g。 %g会对比小数的十进制形式和指数形式,以最短的方式输出小数,让输出结果更加简练。所谓最短,就是输出结果占用最少的字符。

读者需要注意的两点是:

  • %g 默认最多保留六位有效数字,包括整数部分和小数部分;%f 和 %e 默认保留六位小数,只包括小数部分。
  • %g 不会在最后强加 0 来凑够有效数字的位数,而 %f 和 %e 会在最后强加 0 来凑够小数部分的位数。

除了 %g,还有 %lg、%G、%lG:

  • %g 和 %lg 分别用来输出 float 类型和 double 类型,并且当以指数形式输出时,e小写。
  • %G 和 %lG 也分别用来输出 float 类型和 double 类型,只是当以指数形式输出时,E大写。

c语言 printf格式化输出

c语言 printf格式化输出

#include <iostream>
#include<stdio.h>
#include <cstring>
using namespace std;


int main()
{

 char c_test[20] = {"1234567890"};
 double d_test = 12321;
 
 printf("|%-15s|\n",c_test);  //左对齐,15位长度,不够补空格        |1234567890     |
 printf("|%15s|\n",c_test);   //右对齐,15位长度,不够补空格        |     1234567890|
 printf("|%015d|\n",d_test);  //右对齐,15位长度,不够补0           |000000304558080|
 printf("|%-15.2f|\n",d_test);//左对齐,15位长度,带两位小数,不够补空格 |12321.00       |

    return 0;
}

参数

%a             浮点数、十六进制数字和p-记数法(C99)
%A    浮点数、十六进制数字和p-记法(C99)
%c     一个字符(char)
%C           一个ISO宽字符
%d    有符号十进制整数(int)
%f     单精度浮点数(默认float)、十进制记数法(
%.nf  这里n表示精确到小数位后n位.十进制计数)
%g    根据数值不同自动选择%f或%e.
%G    根据数值不同自动选择%f或%e.
%i              有符号十进制数(与%d相同)
%o    无符号八进制整数
%p      指针
%s     对应字符串char*(%S    对应宽字符串WCAHR*(%u  无符号十进制整数(unsigned int)
%x    使用十六进制数字0f的无符号十六进制整数 
%X      使用十六进制数字0f的无符号十六进制整数
%%     打印一个百分号
 
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出,如省略表示右对齐输出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。
 
格式字符 格式字符用以指定输出项的数据类型和输出格式。 ①d格式:用来输出十进制整数。有以下几种用法:   %d:按整型数据的实际长度输出。   %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 ②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。 例: main() {
   int a = -1;   printf("%d, %o", a, a); } 运行结果:-1,177777 程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。 ③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。 ④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。 ⑤c格式:输出一个字符。 ⑥s格式:用来输出一个串。有几中用法   %s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)   %ms:输出的字符串占m列,如果字符串本身长度大于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:输出共占m列,其中有n位小数,若数值宽度小于m右端补空格。 ⑧e格式:以指数形式输出实数。可用以下形式:   %e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。   %m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。 ⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。 --------------------------------------- 关于printf函数的进一步说明: 如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如: printf("%f%%", 1.0/3); 输出0.333333%。 --------------------------------------- 对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位. 对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.
 

#include <iostream>#include<stdio.h>#include <cstring>using namespace std;

int main(){
 char c_test[20] = {"1234567890"}; double d_test = 12321;  printf("|%-15s|\n",c_test);      //左对齐,15位长度,不够补空格                 |1234567890     | printf("|%15s|\n",c_test);       //右对齐,15位长度,不够补空格                 |     1234567890| printf("|%015d|\n",d_test);      //右对齐,15位长度,不够补0                    |000000304558080| printf("|%-15.2f|\n",d_test);    //左对齐,15位长度,带两位小数,不够补空格     |12321.00       |
return 0;}

今天关于printf用法大全,C语言printf格式控制符一览表c语言printf输出控制符的分享就到这里,希望大家有所收获,若想了解更多关于awk的输出格式控制:print 和printf、C中printf、sprintf和fprintf的区别(代码示例)、C语言 printf()函数的格式控制符、c语言 printf格式化输出等相关知识,可以在本站进行查询。

本文标签: