输入输出:
 

   1. 输入 --->[内存]--->输出
   2. c语言本身 没有输入输出
      printf  基于C语言实现的 函数  
   3. c函数库 
      标准输入输出库  stdio
                 i -- input 
                 o -- output                 
   
   4.学习 标准输入输出库  提供相关函数 
     
     getchar / putchar
     scanf  / printf
     gets  / puts     (*) ---这一组

    
  (1)getchar / putchar
 

①int getchar(void); //函数原型 
    功能:   从键盘获得一个字符
    参数:void ---空 -- 不需要传递实际参数 
    返回值:   成功 返回读到的 字符 对应的ASCII值 
                   失败 EOF //end of file (-1)
      
②putchar 

 int putchar(int c); 
 功能:    输出一个字符 
 参数: @c  --- 要输出的字符    //ascii码值 
 返回值:    成功 返回值被输出的字符的 ascii码值 
                 失败 EOF (-1)


(2)printf/scanf

①printf     //格式化输出函数 
int printf(const char *format, ...);
功能:    格式化输出
参数: @format  //参数得是一个 "字符串"
         @...     //可变参数 
printf("hello world!\n");
printf("a = %d\n",a);
printf("ret = %c:%d\n",ret,ret);

返回值: 成功 返回输出的字符个数 
               失败 负值 (-1)
  
printf("格式控制字符串",输出列表)     //"格式控制字符串"
  普通字符: 不是占位符的其他字符 都是普通字符 ---- 原样输出 
  占位符  : %d %u  ---占位符 会被替换为 输出列表中 对应的数据 
  

占位符:

(1)整型


  %d   --- 表示将数据 转换为 有符号十进制形式   //int 
  %u   --- 表示将数据 转换为 无符号十进制形式 
  %x   --- 表示将数据 转换为 十六进制形式
  %X   --- 表示将数据 转换为 十六进制形式  十六进制中出现的 字母的这些值 输出成大写形式
  %o   --- 表示将数据 转换为 八进制形式 


  (2)浮点型


  %f   --- 表示将数据 转换为 十进制形式小数 ,默认保留6位小数 
  %e   --- 表示将数据 转换为 科学计数法形式小数
  %E      输出结果中的e 大写 
  %g   --- 以一种更简洁的方式来输出,同时不会输出无效的0 


  (3)字符型


  %c   --- 表示将数据 转换为 对应的字符形式 
  %s   --- 字符串 
           "hello" //字符串常量
                   //""
                   //多个字符组合成的 
                   //结束标志 '\0'
%[辅助控制符]d

 #  
   %#x   //十六进制的 前缀0x打印出来 
   %#o   //八进制的 前缀0打印出来
 m.n
   m   是个数字   表示要输出的数据的宽度 
   %3d //表示指定输出结果的宽度为3列字符的宽度 
       如果 m <= 数据实际的宽度 此时 以实际数据的宽度来输出 
       如果 m >  数据实际的宽度 此时 以m的宽度来输出,此时在前面默认补空格 
       
       注意:

       1.   默认输出效果 是右对齐 
          左对齐  -m 
          - 表示是左对齐 此时空格补在后面 
        2. 小数点也算一列宽度 
       补0 //只能用在右对齐 
         %08d 
        
        
   .n  n也是个数字 
       只用于小数 和 字符串 
      %.nf  //表示保留n位小数 
      %.ns  //表示保留前n位字符 
  %ld   //l --- long 
  %lld  //ll --- long long 
  %hd   // half --- 一半 2字节 
  %hhd  // 1字节
 

scanf(); //输入

 int scanf(const char *format, ...);
 
 scanf("格式控制字符串",地址列表)
 
 int a;
 scanf("a=%d",&a);
 "格式控制字符串"
 //"格式控制字符串"
  普通字符: 不是占位符的其他字符 都是普通字符 ---- 原样输入 
  占位符  : %d %u  ---占位符 会将输入进的数据,转换为指定的格式
  
注意:
  1. 地址列表 对应的一定是 有效的空间的地址 
  2. 占位符的作用,是将输入的数据转换为指定的格式,存放到对应的存储空间上
  3. 注意 占位符 与 对应的额数据类型 ---保持一致
       %f  --- float 
       %lf --- double
       %Lf --- long double
       
       %d %u %x %X %o 默认 匹配 int 这种大小的数据
       short  --- %hd
       long   --- %ld
       long long --- %lld
  4.多个数据输入时,数据之间可以用 空白符 分隔
    空白符 (\n tab 空格)
  5.占位符和地址列表的参数 要一一对应 
    Segmentation fault (core dumped) //原因: 是因为访问到了不能访问的空间 
      段          错误 
  6.scanf中出现了空白符 ---效果是,匹配任意多个空白符 
   scanf("%d\n",&a);    
   
 

   7. scanf工作原理
-> 12.34\n
   =>[12.34\n] //输入缓冲区
       |
     scanf("%d",&a)
       |
     开始从输入缓冲区逐个字符匹配 
           
    [.34\n]
    
scanf("%d",&a); 

   %d --- 识别匹配有效(合法)字符 '0'~'9' 
   
       []
   scanf("%d\n",&a); 
   
   8.scanf输入结束的情况 
     (1).遇到了非法字符 
     (2).遇到空白符结束  
        123\n
        scanf("%d",&a);
     (3).达到指定的宽度结束 
        scanf("%3d",&a);
  9.辅助控制符 
    %ld
    %lld
    %3d  
  10.%c 可以匹配 空白符 
  11.匹配空白符 
    scanf(" %d",&a);
    scanf("%*c%c",&c); //%*c 匹配一个 字符 ,但是并不保存 
    gechar(); //清理缓存    
   
  [a\n]
  scanf("%d",&a);
  scanf("%c",&c);
  
  
占位符:
  整型
  %d   --- 表示将数据 转换为 有符号十进制形式   //int 
  %u   --- 表示将数据 转换为 无符号十进制形式 
  %x   --- 表示将数据 转换为 十六进制形式
  %X   --- 表示将数据 转换为 十六进制形式  十六进制中出现的 字母的这些值 输出成大写形式
  %o   --- 表示将数据 转换为 八进制形式 
  浮点型
  %f   --- 表示将数据 转换为 十进制形式小数 ,默认保留6位小数 
  %e   --- 表示将数据 转换为 科学计数法形式小数
  %E      输出结果中的e 大写 
  %g   --- 以一种更简洁的方式来输出,同时不会输出无效的0 
 
  字符型
  %c   --- 表示将数据 转换为 对应的字符形式 
  %s   --- 字符串 
           "hello" //字符串常量
                   //""
                   //多个字符组合成的 
                   //结束标志 '\0'

4. 输入输出:c 语言本身是不提供输入输出语句的,是由库
函数实现的
4.1.scanf 格式控制核心特性
1.格式符特点:
①针对不同类型数据有专属格式符,如 %c(单个字符)、%s(字符
串)、%h(短整型)。
②浮点数区分严格:%f 对应 float 类型,%lf 对应 double 类型,
不可混用。
2.输入长度与精度控制:
①不支持用小数点(.n)规定输入精度(如 %8.2f 是错误的)。
②仅能用整数 m 限制输入整体长度(如 %mf),超过 m 的部分会
残留于输入缓冲区,不被当前 scanf 读取。
4.2.printf 格式控制核心特性
1.格式控制规则:
格式由 % + 格式字符组成,% 后仅识别一个格式符。
2.格式符特点:
①整型输出:%d(默认有符号)、%o(八进制,无符号;%#o 带前
缀)、%x(十六进制,无符号;%#x 带前缀)。②浮点数不严格区分:%f 可同时用于 float double 类型(与
scanf 不同)。
3.输出长度与精度控制:
①字符串 %ms:若输出长度 > m,按实际长度输出;若 < m,左侧
补空格(与 scanf 不同)。
②支持用小数点规定精度(如 %6.2f):小数部分固定保留 2 位(不
足补 0,超过四舍五入),总宽度至少 6 个字符(含整数、小数点、
小数部分),不足则左侧补空格,超过按实际长度输出。
4.3 puts()函数:用于输出一个字符串,输出将\0 换成\n,默认换
4.4 gets()函数:用于输入一个字符串,并得到一个函数值:字符
串的起始地址。(容易导致越界,栈崩溃)
4.5 puttchar():从终端输出一个字符,可以是字符型变量也可以时
整型变量
4.6 getchar():向终端输入一个字符,可以是字符型变量也可以时
整型变量
5.字符型 char
5.1 ’ ’:单引号中只能为单个字符;” ’:存放字符串
5.2 ascii 码和转义字符:32=’ ’(空格)

   

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐