在C语言中,printf()是最常用的输出函数。printf()的使用很简单,如要打印Hello,World!这个字符串,只需运行:

 

printf("Hello,World!");

这样就会在屏幕上输出hello,World!这个字符串。

  printf不仅可以输出常量,还可以输出变量。如要打印上面的字符,还可以:

#include<stdio.h>
#define HW "Hello,World!"
int main(void)
{printf("%s", HW);return 0;
}

其中"%s"是一个转换说明符,表示将要输出的是一个字符串,后面的HW则是要打印的字符串。

  使用这种方式,在printf中可以使用多个转换说明符,需特别注意的是,""(双引号)中转换说明符的个数和类型必须与后面的参数完全一致,否则可能会不能输出或得不到想要的结果。

  这里有一个情况需特别注意,先看下面的程序:

 

 #include<stdio.h>int main(void){float n1 = 123.45;float n2 = 456.78;long n3 = 12000000;long n4 = 34000000;printf("n1 = %ld, n2 = %ld, n3 = %ld, n4 = %ld\n", n1, n2, n3, n4);return 0;}

在这段代码中,试图使用转换说明符%ld打印float型和long型数据,其输出结果为:

n1 = -1073741824, n2 = 1079958732, n3 = -536870912, n4 = 1081904250

其结果完全错误。这中错误与printf()函数的打印过程有关,下面重点介绍。

  当执行上面的printf那一句时,后面的n1,n2,n3,n4这4个参数被传送到内存中的堆栈中,但是,float型数据会被当做double型处理,即占8个字节,而long型占4个字节。而打印数据时则是根据转换说明符的类型决定。由于上面都使用了%ld即long型的转换说明符,在打印n1时实际从堆栈中取出的是n1的前4个字节,并将其转换成一个long型数据输出。打印n2时实际取出的是n1的后4个字节。以此类推,在打印n3,n4时,虽然转换说明符匹配(都是long型),但实际取出的是n2的前4和后4个字节并输出,所以结果是完全错误的。

  *(星号)在printf中的使用:

  我们知道,在printf中的转换说明符中加上一些数字可以格式化的输出数据,例如 %10d表示输出一个占10位的整数。但在某些场景下,我们需要动态改变输出的位数。此时,我们可以将*作为占位符,并在后面的参数中给出具体的数字。例如:

printf("The number is %*d.\n", width, number);

在运行此段代码时,*会被width所代替,从而输出格式化后的数据。需要注意的是,后面参数的先后顺序一定是*的参数在前,转换说明符表示的具体数字在后。

转载于:https://www.cnblogs.com/msing/p/4262590.html

C之printf()函数相关推荐

  1. 关于C语言中printf函数“输出歧视”的问题

    目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...

  2. c语言自定义char*函数返回值是乱码_[每日C语言」printf()函数的修饰符和返回值...

    在上一个小demo<printf()函数(1)>中主要说了一下printf()函数的转换说明符,这些转移说明符是可以被修饰的.我们可以在%d和定义的转义字符之间通过插入修饰符对基本的转换说 ...

  3. c程序设计语言中printf,编程序 用getchar函数读入两个字符c1和c2,然后分别用putchar和printf函数输出这两个字符。请问...

    编程序,用getchar函数读入两个字符给c1和c2,然后分别用putchar和printf函数输出这两个字符.请问: 1. 变量C1,C2应定义为字符型或整型?或二者皆可? 答:在这个题目里,变量C ...

  4. php 格式化评论量函数,深入剖析PHP中printf()函数格式化使用

    printf()函数优点在于可以格式化输出! printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少. ② ...

  5. STM32中关于串口通信的printf()函数重定向问题

    在STM32串口通信程序中使用printf()函数发送数据非常方便,但是需要先进行简单的配置,下面介绍两种配置方法. 方法一.对工程属性进行配置 第1步:在main.c中包含"stdio.h ...

  6. scanf函数和printf函数

    C程序实现输出和输入的 主要是printf函数 和 scanf函数,这两个函数是格式输入输出 格式声明由%和格式字符组成 如%d,%f 格式字符:  d格式符:用来输出一个有符号的十进制整数  c格式 ...

  7. C中printf函数的实现原理

    一.printf函数的实现原理 在C/C++中,对函数参数的扫描是从后向前的.C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出来,在计算机 ...

  8. 用宏定义代替printf函数

    问题提出 有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会.我们总不能对每一条print ...

  9. C语言程序设计基础及应用实例---第一节 printf函数的使用

    (1)printf函数打印字符串 #include <stdio.h>int main(void) {printf("Helloworld!\r\n");return ...

  10. PIC中实现printf函数出现:Warning [2066] type qualifier mismatch in assignment

    为什么会出现"Warning [2066] type qualifier mismatch in assignment"(警告[2066] 指定的类型限定符不匹配)? 解答:    ...

最新文章

  1. NVIDIA TX2 使用 USB 摄像头
  2. 学习Angular前了解下TypeScript
  3. PostgreSQL何以支持丰富的NoSQL特性?
  4. c语言中空格字符怎么表示_漫画:腾讯面试题,请实现把字符串中的空格替换为“%20”...
  5. 石川es6课程---12、Promise
  6. 一道关于Java并发的面试题
  7. wms仓储系统培训_WMS系统开创智慧仓储新方向
  8. LeetCode 13. Roman to Integer
  9. php session写入数据库_php session 写入数据库,phpsession
  10. matplotlib 第二次执行报错在 django web服务中
  11. 从Unity3D编译器升级聊起Mono
  12. 排得更好VS估得更准VS搜的更全「推荐、广告、搜索」算法间到底有什么区别?...
  13. 电脑黑屏的原因有哪些
  14. python写excel,请大表哥喝杯茶
  15. CTF杂项小结--沙窝李的王
  16. 俄罗斯方块30周年 设计者忆当年
  17. IDEA新建项目配置tomcat
  18. 迅为iTOP-i.MX6ULL 开发板-Mqtt 移植教程
  19. web2.0中流行的设计元素:颜色
  20. linux内核黑名单,如何将内核模块列入黑名单?

热门文章

  1. 用“连接”勾勒角色:《死亡搁浅》亡人的设计及其背后的故事谜题
  2. [Mysql]——通过例子理解事务的4种隔离级别
  3. c#与mysql数据库连接以及.net framework版本修改问题
  4. vSphere 计算vMotion的迁移原理
  5. Java 在 CMD 环境下编译
  6. GitHub 上 57 款最流行的开源深度学习项目【转】
  7. C# 控制台语音计算器
  8. iOS NSNotificationCenter详解
  9. EasyUI datagrid : 启用行号、固定列及多级表头后,头部行号位置单元格错位的问题...
  10. 不能使用缺陷数据作为绩效度量