C之printf()函数

  在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个数据并输出,所以结果是完全错误的。

时间: 2024-11-03 14:16:11

C之printf()函数的相关文章

printf函数重定向

printf函数底层会调用fputc函数 /*重定向c库函数printf到USART1*/ int fputc(int ch, FILE *f) { /*发送一个字节数据USART1 */ USART_SendData(DEBUG_USART, (uint8_t) ch); /* 等待发送完毕 */ while (USART_GetFlagStatus(DEBUG_USART, USART_FLAG_TXE) == RESET); return (ch); }

对于printf函数和C语言编程的初步拓展

前面说过了,任何程序都要有输出,所以printf函数是一个很重要的函数,所以有必要在学变量之前先拓展一下. 其实编程就是用计算机语言说话,一句一句地说,只要语法没错就能运行,至于能实现什么功能,就看编程者的水平了. 那么看一下下面的代码 #include<stdio.h> int main(void) { printf("hello world"); printf("hello world"); return 0; } 你觉得运行的结果在屏幕上会显示什么

C的第一课printf函数的基本用法

printf函数: printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息. printf()函数的调用格式为: printf("<格式化字符串>", <参量表>). #include <stdio.h> /* printf函数 printf("<格式化字符串>", <参量表>) */ int main() { int i=8,j=6; int *p=NULL; char *nam

黑马程序员----printf函数和scanf函数

一.printf函数和scanf函数,都被定义在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>. 二.printf函数 1.定义:printf()函数是格式化输出函数, 一般用于向终端按规定格式输出信息; 2.格式:printf("XXXXXXXX"); 三.scanf函数 1.定义:scanf()函数按用户指定的格式从键盘上把数据输入到指定的变量之中; 2.格式:scanf("%d", &numbe

C语言中如何用printf函数输出百分号?

打两个%%..比如printf( "%%\n" );就可以输出一个百分号.同理,输出两个百分号的话就需要写四个. #include <stdio.h> int main(int argc, const char * argv[]) { printf("%%%%");//printf函数打印 % 字符要用 %% 才能打印 return 0; }

利用printf()函数,打印一个由*号组成的大写字母A

#include <stdio.h > void main() { printf(" *\n") ; printf(" * *\n"); printf(" *****\n"); printf(" * *\n"); printf(" * *\n") ; } 利用printf()函数,打印一个由*号组成的大写字母A,布布扣,bubuko.com

c语言中printf()函数中的参数计算顺序

今天看到了一个关于printf()函数计算顺序的问题,首先看一个例子: #include<stdio.h> int main() { printf("%d---%d---%d",printf("ab"),printf("c"),printf("eee")); } 输出结果为: 这说明printf()函数在计算的时候顺序是从右往左的,但最后输出的顺序是从左往右的.所以遇到类似题目时,应该根据运算顺序和输出顺序灵活判断

【C语言】浅谈可变参数与printf函数

一.何谓可变参数 int printf( const char* format, ...); 这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用"-"表示). 而我们又可以用各种方式来调用printf,如: printf( "%d ",value); printf( "%s ",str); printf( "the number is %d ,string is:%s ",

关于printf函数的返回值问题

#include <stdio.h> #include <stdlib.h> int main() { printf("%d", printf("%d", printf("%d", 43))); system("pause"); return 0; } 大家平时经常使用printf这个输出函数,但是有多少人想过它的返回值是什么?或者想过它有没有返回值! 通过上面程序的运行结果就可以知道printf函数的

一个简化的printf函数

<C和指针>第7章第5道编程题: 实现一个简化的printf函数,它能够处理%d.%f.%s 和 %c 格式码,根据ANSI标准的原则,其他格式码的行为是未定义的.你可以假定已经存在函数 printf_integer 和 printf_float,用于打印这些类型的值.对于另外两个类型的值,使用 putchar 来打印. 答案参考百度知道 1 /* 2 ** 实现一个简易的printf函数 3 ** 它能处理%d, %f, %s,%c格式码 4 */ 5 6 #include <stda