C语言简单记-printf与scanf详解

qingsongzdq 2019-06-20

“C语言简单记”基于我以前学习过程中做过的笔记、随笔,特意整理了一下,只是简单的记录了一些比较重要的知识点,不会去深入探究,面向的是一些有语言基础的人查找阅读,还请见谅,谢谢~~~


当初还是小白的我刚接触C语言,那时候什么都不懂,printf和scanf傻傻分不清楚
.想想当初好傻好天真,哈哈哈!(卖的一手好萌)

printf

1.格式控制符使用说明

  • printf的格式控制的完整格式:

    • "% - 0 m.n l或h 格式字符"

  • 下面对组成格式说明的各项加以说明:

    • %:表示格式说明的起始符号,不可缺少。

    • -:有-表示左对齐输出(右侧补空格),如省略表示右对齐输出(左侧补空格)。

    • 0:有0表示指定空位填0,如省略表示指定空位不填。

    • m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型 数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。

    • l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

    • 格式字符(格式字符用以指定输出项的数据类型和输出格式)

      • d格式:用来输出十进制整数。有以下几种用法:

      • %d %hd %ld

      • o格式:以无符号八进制形式输出整数

      • x格式:以无符号十六进制形式输出整数

      • f格式:用来输出实数(包括单精度,双精度),以小数形式输出

      • u格式:以无符号十进制形式输出整数

      • c格式:输出一个字符

      • s格式:用来输出一个串。有几中用法

%s:例如:printf("%s","CHINA")输出"CHINA"字符串(不包括双引号)。

%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串 长小于m,则左补空格。

%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。

%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格,注 意:如果n未指定,默认为0。

%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出,注意:如果n未指定,默认为0。
如果是sprintf(desc, "%m.ns", sour);
如果desc空间够的话,会在%m.ns 串 的结尾自动补null 字符,不同于strncpy。
例如 :sprintf(desc, "%.3s", "123456"); desc如果空间>=4字节的话,第4个字节将是null字 符。

2.实型输出问题

  • %f:不指定宽度,整数部分全部输出并输出6位小数。

// 默认输出6位小数
    printf("%f", 3.1415926535f);
    输出结果: 3.141593
  • 指定保留多少位小数

// 通过%.nf方式,指定保留多少位小数
    printf("%.2f", 3.1415926535f);
    输出结果: 3.14

3.实型精度问题

  • 对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位.

  • 对于双精度数,使用%lf格式符输出时,前15位是有效数字,小数6位

进制floatdouble
十进制有效位数7位15位
二进制有效位数24位53位
  • 一个练习引发的血案

    • 要求输出3.1415926535f所有小数

// 尝试通过指定保留位数
    printf("%.10f", 3.1415926535f);
    输出结果: 3.1415927410
    // float有效数字是7位, 多余位数则会显示垃圾数据(不准确)

    // 什么是有效位?
    printf("%.10f", 314159.26535f);
    输出结果: 314159.2500000000

// 尝试指定宽度
    printf("%12f", 3.1415926535f);
    输出结果: $$$$3.141593 注意$代表空格

// 尝试指定宽度和保留位数
    printf("%12.10f", 3.1415926535f);
    输出结果: 3.1415927410

// 要想完整输出必须使用double, 因为double类型精度小数点后6位,有效数字是15位
    double doubleValue = 3.1415926535; // 注意后面没有f
    printf("%.10lf", doubleValue);
    输出结果:3.1415926535

scanf函数格式控制符

格式意义
d输入一个十进制整数
o输入一个八进制整数
x输入一个十六进制整数
i输入一个有符号或无符号的十进制、八进制、十六进制整数
u输入一个无符号十进制整数
f 、e或E、 g或G输入一个小数形式或指数形式的浮点数
c输入一个字符
s输入一个字符串
  • 获取整形数据

// 1.定义变量用于接收输入数据
    int num = 0;
    // 2.利用scanf函数接收用户输入数据
    scanf("%d", &num);
    // 3.打印验证结果
    printf("num = %d", num);
  • 获取实数型数据

// 1.定义变量用于接收输入数据
    float num = 0;
    // 2.利用scanf函数接收用户输入数据
    scanf("%f", &num);
    // 3.打印验证结果
    printf("num = %d", num);

注:不加\n,需要加&取地址

  • 非法的输入

    • 除"空格","回车","tab"之外, 如果输入的数据和scanf接收的数据不匹配将会自动结束接收


更多关于iOS学习开发的文章请登陆我的个人博客www.zhunjiee.com,欢迎前来参观学习

相关推荐

NewActivity / 0评论 2020-05-08
fengjing81 / 0评论 2020-01-23