C语言学习日记 函数输入和输出

输入输出: 1、控制语句  2、函数调用语句   3、表达式语句 4、空语句  5、复合语句

  程序的主要输入输出流程如下:

输入设备-- 运算器 + 控制器 ---- 输出设备
                   存储器

也可也这样看:

输入 ---> 内存 ---> 输出

int putchar(int c);          //形参 --- 形式参数   可以被实际的值替换 他只是一个形式int c。本身是一个变量。
 功能:
   输出一个字符
 参数:
  @c  要输出的字符的ascii码值
  返回值:
  成功 返回输出了的字符的ascii码值
  失败 EOF(实际上这个值是-1)

eg:
    char c = 'a';
    
    putchar(c);   // 输出c中ascii码值对应的字符是 -1 )

int getchar(void)
功能:
 从键盘获取一个字符
 参数:
   void 表示空类型,在函数形参表示没有参数
  返回值:
  成功  返回读到了的字符的ascii码值
  失败  返回一个 -1
  
 eg:
   c = getchar(); //c将保存getchar从键盘获得道德字符的ascii码值

格式化输出函数
  printf(const char *format, ...)   // ...表示可变参数--参数数量是可以变化的
  int printf(格式控制字符串,输出表列);
  eg:
    printf("a = %d\n",a);       //就是我们平常使用的printf输出打印

格式控制字符串:
 占位符            //将来要被后面的参数值替换掉 --格式转换

整型类型:
 %d    以有符号十进制的格式输出 
 %u    以无符号十进制格式输出
 %o    以八进制格式输出
 %x    以十六进制格式输出
    %X    表示输出的十六进制中的字母变成大写

 浮点类型:
     %f 以十进制形式的小数输出,默认保留六位小数
     %e 以科学计数法的形式输出         //示例  f = 1.234567e+02    E 可以大写 输出的e也是大写
     %g 以 %f 和 %e 更简洁的方式输出,输出结果中不会保留没有意义的0

 字符型;
     %c 以字符的形式输出
     %s    以字符串的形式输出   使用方法://  printf(“%s”,“abcd”);

辅助控制符:
     #  %#o   //以八进制格式输出,前面带上一个0
        %#x   //以十六进制的格式输出,前面带上0x

---------------------------------------------------------------------------------------------------------------

在输出的时候也可也加上类似%5.2d这种

m.n   m输出的宽出 //列数 
     %5d    //5表示输出的宽度  要是输出的数据比设定的宽度更长,可以完整输出 不够的话默认右对齐,前面空的地方补0
     %05d   //前面的要补空格的地方变成补 0

(上面是右对齐,实际上也可以左对齐:   %-5d  // -这个就表示左对齐)       

浮点数:

对于浮点类型的数据:    

%.2f      //保留两位小数 
     
 (    当%5.2f 时   小数点也占一个宽度)

  字符串:
     保留前n个字符   ----->  %.2s

     %ld  // long的意思
     %lld  //-- long long int
     %Lf   //表示输出 long double 注意 L 要大写

注意:
 一个占位符只能匹配一个参数

对于普通字符 程序会原样输出

scanf 格式化输入函数
 
  scanf(const char *format,...);
  
  scanf格式:
  scanf("格式控制字符串",地址列表);
  
  int a;
  scanf("%d",&a);
  
  scanf(“a = %d”,&a);   //这个在使用的时候 需要先输入a = 再输入要输入的数,所以在使用的时候尽量不输入普通字符。
  
  若是输入的时候,不加&只写a,b,c 那a,b,c,本身代表的值 当作了地址。但这些地址可能对应到了不能访问的空间,代码运行之后会导致“段错误”
  
  参数:
  格式控制字符串:
    普通字符     //原样输入
    占位符
    整型
    %d      //  表示将输入的数据  转换为  十进制的格式   只识别能转换成十进制的
    %x      // 将输入的字符串 转换为  十六进制的格式
    %o      // 将输入的字符串 转换为 八进制格式
    浮点型
    %f      //将输入的数据转换成小数的格式   只识别能转换成小数的那些(科学计数法也可以eg:1.2e3)
    %Lf     //表示将输入的浮点型的数据 ,转换为double类型的数据  
    %e
    %g      //都能转换浮点形式的数据  默认都是float类型
    %Le     %Lg   ======-------> 这两个就转换成了double类型
    字符型

    %c     //将输入的数据转换为 字符数据
    %s     //将输入的数据转换为字符串数据
    
    
    
    scanf要输入多个数据的时候可以用回车或者空格来隔开各个数据 //输入多个数据的时候,数据之间可以使用”空白符“来隔开
                                                               //空白符(Tab   space  enter)    
    scanf注意
      Segementation (分段) fault(core dumped)   //段错误
错误的原因:
     主要原因,代码试图访问不能访问的内存空间。      
                                                               
    scanf中 占位符 与地址列表 的个数  要匹配
    scanf 地址列表中注意得是有效地址
    eg:
     int a = 10;
     scanf("%d",a);   //此时a被当地址使用了不是一个有效的地址
    --------------------------------------------------
    辅助控制符
    m.n   //m 是宽度 --在输入时 表示制定了输入数据的宽度
          //一旦达到宽度时,表示,此次输入结束
          eg:
          scanf(“%3x”,&a);//如果输入的数据以及匹配了3个字节的宽度 则表示scanf识别结束
          123456   
          12\n
          
          .n  //输入时,不能制定所谓的精度
    在输入的时候只能加宽度 和给不同大小的数据
    
    ----------------------------
    输入缓冲区:
    //缓冲区是一块内存
    输入的数据都先被输入到缓冲区,scanf到缓冲区进行数据的匹配。
    
    
    连续输入两个字符的时候 中间的分割空格也会被识别成字符,所以在连续输入的时候
    要在中间加上空格   ==== 或者===== %*c%c   %*d%d
    注:
      %*c // 可以匹配一个数据项,匹配走的数据项并不给到任何变量空间中
      scanf(“%d ”);
      scanf(“%d\n”); 如果出现空白符,表示 从输出中匹配任意多个空白符
      
      scanf匹配结束的情况:
      1、遇到空白符(回车 空格 Tab)
      scanf(“%d%d”,&a,&b);
      123 456  //      
      2、到达指定的宽度
      scanf(“%3d”,&a);  // 123456  === 最终只读到123
      3、遇到非法字符
      scanf(“%d%d”,&a,&b); //123a456
      123 ---a对于%d就是非法字符
      
      
      while(getchar()!= '\n');    // 这段可以清除缓冲区的数据
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值