当前位置:   article > 正文

C 语言 —— printf()_c打印输出语句

c打印输出语句

  语法printf(格式字符串,[参数列表]);
  注意:使用 printf 打印数据时,待打印的数据的类型一定要和格式字符串中的转换说明相匹配!!!
  如果对格式转换符还不了解的,可以点击这里查看格式转换符

1. 格式化输出

在这里插入图片描述
在这里插入图片描述
  数字 表示最小字段宽度。
  如果需要打印的数据宽度小于该数字,那么在前面自动补空格;如果需要打印的数据宽度大于等于该数字,正常打印。默认是右对齐的,搭配 - 表示左对齐。搭配 0 表示不足补 0,而不是空格。

#include <stdio.h>
int main()
{
    int i = 100;
    printf("*%d*\n",i);
    printf("*%6d*\n",i);
    printf("*%-6d*\n",i);
    printf("*%06d*\n",i);
    getchar();
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
*100*
*   100*
*100   *
*000100*
  • 1
  • 2
  • 3
  • 4

  .数字 表示精度。
  对于浮点数来说,精度就是显示小数点后几位,如果浮点数小数点后位数比这个数字小,则补零;如果浮点数小数点后面位数比这个数字大,则四舍五入。
  对于整型数来说,精度就是待打印的数据的最小位数,如果待打印数据位数不足,前面补零。
  PS:如果 0 标记和精度一起出现,0 标记会失效。

printf("*%06.4d*\n",i);// 0标记失效,输出*  0100*
  • 1

2. 转换说明

  转换说明把以二进制格式储存在计算机中的值转换成一系列字符(字符串)以便于显示。例如,数字76在计算 机内部的存储格式是二进制数01001100。%d 转换说明将其转换成字符 7 和 6,并显示为 76;%x 转换说明把相同的值(01001100)转换成十六进制记数法 4c;%c 转换说明把 01001100 转换成字符 L。

  1. 整数类型的转换说明不匹配
  2. 浮点数类型的转换说明不匹配
// 转换说明不匹配示例1
short j = -336;
// 将一个负数打印为无符号 short int 类型,输出结果是65200
printf("%hu\n",j); 
  • 1
  • 2
  • 3
  • 4
// 转换说明不匹配示例2
int k = 336;
// 将大于256的数打印为 char 类型,输出结果是 P,其 ASCII 是 80
printf("%c\n",k);
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

// 转换说明不匹配示例3
float  n1 = 3.0;
double n2 = 3.0;
long   n3 = 2000000000;
long   n4 = 1234567890;
// 将 long 类型数据n3和n4打印为 double 类型数据。
printf("%.1e %.1e %.1e %.1e\n", n1, n2, n3, n4);
// 将 double 类型数据n1和n2打印为 long 类型数据。
printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
// 打印为e计数的浮点数
3.0e+000 3.0e+000 3.1e+46 1.7e+266
// 打印为 long 类型数据
0 1074266112 0 1074266112
  • 1
  • 2
  • 3
  • 4

  具体情况因编译器实现而异。这个结果是《C Prime Plus》中的结果,我在 Windows 下运行的结果是 0 0 2000000000 1234567890,在 Ubuntu 下运行的结果会报错,它严格要求转换说明是匹配的,不允许输出格式是 long 类型,而参数是 double 类型的。

  如果printf()语句有其他不匹配的地方,即使用对了转换说明也会生成虚假的结果。用%ld转换说明打印浮点数会失败,但是在这里,用 %ld 打印 long 类型的数竟然也失败了!
  解释:该调用告诉计算机把变量n1、n2、、n3和n4的值传递给程序。这是一种常见的参数传递方式。程序把传入的值放入被称为栈(stack)的内存区域。 计算机根据变量类型(不是根据转换说明)把这些值放入栈中。因此,n1被储存在栈中,占8字节(float类型被转换成double类型)。同样,n2也在栈中占8字节,而n3和n4在栈中分别占4字节。然后,控制转到printf()函数。该函数根据转换说明(不是根据变量类型)从栈中读取值。%ld转换说明表明 printf()应该读取4字节,所以printf()读取栈中的前4字节作为第1个值。这是 n1的前半部分,将被解释成一个long类型的整数。根据下一个%ld转换说 明,printf()再读取4字节,这是n1的后半部分,将被解释成第2个long类型的 整数(见图4.9)。类似地,根据第3个和第4个%ld,printf()读取n2的前半部分和后半部分,并解释成两个long类型的整数。因此,对于n3和n4,虽然用对了转换说明,但printf()还是读错了字节。

在这里插入图片描述

3. printf() 的返回值

  printf() 返回打印的字符的个数,如果输出有错误,则 printf() 返回一个负值。

  printf() 的返回值是其打印输出功能的附带用途,通常很少用到,但在检查输出错误时可能会用到(如,在写入文件时很常用)。

  注意计算输出的字符个数是针对所有的字符,包括空格和不可见的换行符(\n)。

4. 打印较长字符串时的断行

  1. 方法1:使用多个printf()语句。
  2. 方法2:用反斜杠(\)和Enter(或Return)键组合来断行。PS:下一行代码必须从最左边开始,如果有缩进,那么缩进的这些空格都会成为字符串的一部分。
  3. 方法3:ANSI C引入的字符串连接。在两个用双引号括起来的字符串之 间用空白隔开,C编译器会把多个字符串看作是一个字符串。
// 方法1
printf("Here's one way to print a "); 
printf("long string.\n"); 
// 方法2
printf("Here's another way to print a \ 
long string.\n"); 
// 方法3
printf("Here's the newest way to print a " 
"long string.\n"); // ANSI C 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/64791
推荐阅读
相关标签
  

闽ICP备14008679号