printf函数你不知道的那点事!

2018年08月05日 11:28:03 cherrydreamsover 阅读数:51更多

个人分类: C语言C++

在平时的编程中,我们经常使用printf函数进行输出,可以说printf函数真的和我们很熟悉了,但是printf函数也有很多神奇的地方,不知道你知道吗? 
下面我们一起来看看吧!

一、函数基本介绍

  • printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。

  • 函数原型:int printf ( const char * format, ... ); 
    返回值: 
    正确返回输出的字符总数,错误返回负值,与此同时,输入输出流错误标志将被置值,可由指示器ferror来检查输入输出流的错误标志。

  • 调用格式: 
    printf()函数的调用格式为:printf(“格式化字符串”,输出表列)。

  • 格式化字符串包含三种对象,分别为: 
    (1)字符串常量; 
    (2)格式控制字符串; 
    (3)转义字符。

  • C中格式字符串的一般形式为: [标志][输出最小宽度][.精度][长度]类型。 
    其中方括号[]中的项为可选项。

二、printf函数的调用原理(变参函数的调用原理)

从函数原型我们就知道,printf函数是一个变参函数,下面我们将其调用原理展示出来,如下图: 
printf函数你不知道的那点事!

在以后看到了类似于printf函数这样的变参函数时,我们都可以用这幅图本来帮助我们学习了!

三、几个坑!

有了上面的可变参数函数的调用原理,做下面的题就比较简单了,一起看看吧!

1.

#include <stdio.h>

int main()
{
    int i = 43;
    printf("%d\n", printf("%d", printf("%d", i))); 
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

 


  • 输出结果:4321 
    因为:第一次输出的是43,“43”为两个字符,因此下一个为2,“2”是一个字符,因此为1。 

 

扩展:如果输入的i为543,则输出结果就是54331了!

2.

#include <stdio.h>

int main(){
    int i = 8;
    printf("The raw value: i=%d\n", i);
    printf("++i=%d \n++i=%d \n--i=%d \n--i=%d\n", ++i, ++i, --i, --i);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 输出结果: 
    The raw value: i=8 
    ++i=8 
    ++i=7 
    –i=6 
    –i=7

  • 原因如下: 
    printf函数你不知道的那点事!

注意:printf函数虽然是从右往左变化的,但是输出结果时,仍然从左往右。

3.

#include<stdio.h>

int main(){
    int i = 8;
    printf("%d\n%d\n%d\n%d\n%d\n%d\n", ++i, --i, i++, i--, -i++, -i--);
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 输出结果: 




    -7 
    -8

  • 原因如下: 
    printf函数你不知道的那点事!

  • -i--的含义:

  • -i--就是先进行i--运算,然后再取其负值。(因负号-和自减运算符--是同级运算,所以从右向左逐级运算)

    下面是C语言运算符优先级

    printf函数你不知道的那点事!

    --与负号处于同一优先级,而结合方向是从右到左,所以是先进行i--运算,再取负号。

    i--就是把i自减1,但是它的返回值却是i,这就是i--与--i的区别,--i的返回值就是i-1了。

四、printf函数的缓冲

printf一般情况下,默认为行缓冲,遇到以下几种情况会刷新缓冲区,输出内容: 
(1)缓冲区填满; 
(2)写入的字符中有换行符\n或回车符\r; 
(3)调用fflush手动刷新缓冲区; 
(4)调用scanf要从输入缓冲区中读取数据时,也会将输出缓冲区内的数据刷新。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-02
  • 2022-01-28
  • 2021-10-18
  • 2021-08-31
  • 2021-07-27
猜你喜欢
  • 2021-12-09
  • 2021-05-31
  • 2021-06-19
  • 2022-12-23
  • 2022-12-23
  • 2021-10-12
  • 2021-04-14
相关资源
相似解决方案