前言:

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

字符数据的输入输出
  

1.putchar 函数

putchar 函数(字符输出函数)的作用是向终端输出一个字符。其一般形式为 putchar(c)

它输出字符变量c 的值,c可以是字符型变量或整型变量。

具体实现:

也可以输出其他转义字符,例如:

putchar('\101')

putchar(1\ 11)

putchar('\ 0151)

2 getchar 函数

getchar 函数(字符输入函数)的作用是从终端(或系统隐含指定的输入设备)输入一 个字符。 getchar 函数没有参数,其一般形式为 getchar() 。函数的值就是从输入设备得到的字符。

int getchar(void); //函数原型 

具体实现:(输入hello打印出HELLO)
功能:从键盘获得一个字符
参数:void ---空 -- 不需要传递实际参数 
返回值:
      成功 返回读到的 字符 对应的ASCII值 
      失败 EOF //end of file (-1)

3.printf 函数

printf 函数(格式输出函数)的作用是向终端(或系统隐含 指定的输出设备)输出若干个任意类型的数据(putchar 只能输出字符,而且只能是一个字 符,而 printf 可以输出多个数据,且为任意类型)。printf 的一般格式为 printf( 格式控制,输出表列)

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

具体实现:

返回值:
  成功 返回输出的字符个数 
  失败 负值 (-1)
  
printf("格式控制字符串",输出列表)

//"格式控制字符串"
  普通字符: 不是占位符的其他字符 都是普通字符 ---- 原样输出 
  占位符  : %d %u  ---占位符 会被替换为 输出列表中 对应的数据 
  

占位符:
  整型
  %d   --- 表示将数据 转换为 有符号十进制形式   //int 
  %u   --- 表示将数据 转换为 无符号十进制形式 
  %x   --- 表示将数据 转换为 十六进制形式
  %X   --- 表示将数据 转换为 十六进制形式  十六进制中出现的 字母的这些值 输出成大写形式
  %o   --- 表示将数据 转换为 八进制形式 
  浮点型
  %f   --- 表示将数据 转换为 十进制形式小数 ,默认保留6位小数 
  %e   --- 表示将数据 转换为 科学计数法形式小数
  %E      输出结果中的e 大写 
  %g   --- 以一种更简洁的方式来输出,同时不会输出无效的0 
  字符型
  %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字节

%%  //对应输出一个 %  

4.scanf 函数

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'
 

Logo

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

更多推荐