跳过正文
P3 格式化输入、输出
  1. S/
  2. C/C++/
  3. C/
  4. C语言程序设计/

P3 格式化输入、输出

··2003 字·4 分钟· ·
Li
作者
Li
往前走,别回头!
目录
C语言程序设计笔记 - 这篇文章属于一个选集。
P3 格式化输入、输出

(这里开始写正文…)


created: 2025-09-14T19:46 updated: 2025-09-25T20:01
#

3.1 Print 函数
#

  • printf 函数被设计用来显示格式串(format string)的内容,并且在该串中的指定位置插入可能的值。

    • Printf 函数既可以输出常量、也可以输出变量、还可以是更加复杂的表达式
  • 函数格式

  • hello

  • hello

  • hello

  • hello

  • hello

  • hello

  • hello

  • ==你好==

  • 你好

  • printf(格式串,表达式...);
    
    • 格式串包含普通字符转换说明
      • 转换说明:以 % 字符开头,他的作用是打印过程中待填充的值的占位符,并把二进制字符转换成对应的数据类型
  • 转换说明的数量和类型要和后面的数进行匹配
    • ![[Pasted image 20250925183858.png]]
  • 3.1.1 转换说明
    #

    • 转换说明:%m.pX & -%m.pX
      • m 最小栏宽:指定了要显示的最少字符数量
        • 如果要显示的值所需的字符数多于 m,那么栏宽会自动扩展为所需的尺寸
    • 如果要显示的值所需的字符数少于 m,那么会自动补齐空格,并右对齐文本 (在 m 的前面放一个 - 就可以实现左对齐)
  • p 精度:由于转换指定符 X 的不同,p的解释也是不同的
    • %d: p 指明了待显示数字的最少个数,如果省略 p, 则默认他的值是 1
  • %e:表示指数(科学记数法)形式的浮点数
    • 指明了小数点后应该出现的数字个数(默认值为 6)。如果 p 为 0,则不显示小数点
  • %f:指明了小数点后应该出现的数字个数(默认值为 6)。如果 p 为 0,则不显示小数点
  • %g:表示指数形式或者定点十进制形式的浮点数,形式的选择根据数的大小决定
    • p 意味着可以显示的有效数字(不是小数点后的数字)的最大数量
    • 与转换指定符 f 不同,g 的转换将不显示尾随的零
  • Program 用 printf 函数格式化数
    #

    //  
    // Created by Li on 2025/9/16.  
    //  
      
    int main() {  
        int i=0,y=0;  
        float x;  
      
        i = 400;  
        x = 888.888;  
      
        printf("|%d|%2d|%5d|%-5d|%5.2d|%5.4d|\n", i, i, i, i, i,i);  
        // %2d: 2表示最小宽度为2, 不足则补空格, 超过则按实际宽度输出  
        printf("|%f|%12f|%10.2f|%10.2e|%10.2g|\n", x, x, x, x, x);  
        // %f : 默认小数点后6位  
        // %10.2f : 最小宽度10, 小数点后2位,四舍五入    // %10.2g : 根据数值大小选择%f或%e格式输出, 且不输出多余的0  
        return 0;  
    }
    

    3.1.2 转义序列
    #

    • 常用的转义序列
      • \n: 换行符
    • \t:水平制表符
    • \a:警报(响铃)符
    • \b:回退符(使光标从当前位置回退一个位置)
    • \": "
    • \\: \

    3.2 Scanf 函数
    #

    • Scanf 函数包括普通字符转换说明
      • 但是一般情况下只包括转换说明
  • 函数定义
  • scanf("%d",&num);//不要忘记取地址&符号
    
    • 虽然在 printf 函数中,如果转换说明和变量的数量若不匹配,编译器不会报错。但是,scanf 函数中,转换说明必须要和变量的数量匹配

    3.2.1 Scanf 函数的工作方法
    #

    [!important|aside-l]+ 工作方法 Scanf 函数时模式匹配型函数,对于格式串中的每一个转换说明,scanf 函数从输入的数据中定位适当类型的项,并在必要时跳过空格。然后,scanf 函数读入数据项,并且在遇到不可能属于此项的字符时停止。如果读入数据项成功,那么 scanf 函数会继续处理格式串的剩余部分;如果某一项不能成功读入,那么 scanf 函数将不再查看格式串的剩余部分(或者余下的输入数据),并立即返回。

    • 在寻找数的起始位置时,scanf 函数会忽略空白字符(包括空格符、 水平和垂直制表符、换页符和换行符)
      • ![[Pasted image 20250925192256.png]]
    • scanf 函数读取整数或浮点数的规则
      • 整数:scanf 函数首先寻找正号或负号,然后读取数字,直到读到一个非数字时才停止
    • 浮点数:scnaf 函数会寻找一个正号或负号(可选),随后是一串数字(可能含有小数点),再往后是一个指数 (可选)。
      • 指数由字母 e(或者字母 E)、可选的符号,以及一个或多个数字构成。
  • 举个🌰:
    • ![[Pasted image 20250925192852.png]]
  • 3.2.2 格式串中的普通字符
    #

    • 在处理格式串中的普通字符时,scanf 函数采取的动作依赖与这个字符是否为空白字符
      • 空白字符:当在格式串中遇到一个或多个连续的空白字符时,scanf 函数从输入中重复 读空白字符,直到遇到一个非空白字符(把该字符“放回原处”)为止。
    • 其他字符:当在格式串中遇到非空白字符时,scanf 函数将把它与下一个输入字符进行 比较。如果两个字符相匹配,那么 scanf 函数会放弃输入字符,并继续处理格式串。如 果两个字符不匹配,那么 scanf 函数会把不匹配的字符放回输入中,然后异常退出,而 不进一步处理格式串或者从输入中读取字符。
  • 举个🌰:
    • ![[Pasted image 20250925193910.png]]
  • Program 分数相加
    #

    //  
    // Created by Li on 2025/9/16.  
    //  
    #include <stdio.h>  
      
    int main() {  
        int num1,denom1,num2,denom2,result_num,result_denom;  
        printf("请输入第一个分数 \n");  
        scanf("%d/%d",&num1,&denom1);  
        printf("请输入第二个分数 \n");  
        scanf("%d/%d",&num2,&denom2);  
      
        result_num = num1 * denom2 + num2 * denom1;  
        result_denom = denom1 * denom2;  
        printf("这两个分数之和是:%d/%d\n",result_num,result_denom);  
    }
    

    Q & A
    #

    • 转换说明 %i 也可以用于读写整数。%i%d 之间有什么区别?
      • printf 格式串中使用时,二者没有区别。但是,在 scanf 格式串中, %d 只能与十进制(基数为 10)形式的整数相匹配,%i 则可以匹配用八进制(基数为 8)、十进制或十六进制(基数为 16) 表示的整数。如果输入的数有前缀 0(如 056),那么 %i 会把它作为八进制数来处理;如果输入的数有前缀 0x 或 0X(如 0x56),那么%i 会把它作为十六进制数来处理。
  • 如果 printf 函数将 % 作为转换说明的开始,那么如何显示字符 % 呢?
    • printf("%%") ==> %
  • 如果要求读入一个数,而用户录入了非数值的输入,那么 scanf 函数会如何处理?
    • ![[Pasted image 20250925195915.png]]
  • Reply by Email
    C语言程序设计笔记 - 这篇文章属于一个选集。
    P3 格式化输入、输出

    相关文章