C语言第三章

目录

1. 数据的格式化屏幕输出

1.1 格式化屏幕输出

1.2 格式化键盘输入

2. 单个字符的输入和输出

2.1 用getchar()从键盘输入单个字符

2.2 用scanf的%c格式符输入数据

2.3 用putchar()向屏幕输出单个字符 

3. 本章小节


1. 数据的格式化屏幕输出

  • 解决的问题
    • C 语言如何实现数据的输入和输出?
    • 如何向屏幕输出一串字符信息?
    •  如何在屏幕上显示变量的值?
  • 顺序结构程序
    • 输入数据
    • 处理数据
    • 输出数据
  • 程序获得输入数据的方式:键盘,文件
    • 键盘:scanf()
  • 程序输出数据的方式:屏幕,文件
    • 屏幕:printf() 
  • #include<stdio.h>
    • 编译预处理指令在编译之前进行的处理
    • 实现标准输入输出函数scanf()、printf()时,在文件开头定义 

1.1 格式化屏幕输出

  • 按指定格式和类型输出变量的值,或者输出一行字符串

  • printf()格式字符
    • %d d ecimal 输出 十进制有符号 int
    • %u unsigned 输出 十进制无符号 int
    • %f f loat 小数形式 (6 位小数 ) 输出 float,double
    • %e exponent 标准指数形式 输出 float,double
      • ​​​​​​​变量不能作为e的指数
      • 指数必须存在,且必须是整数,正负0均可。
      • E前必须有一个数字
    • %c c haracter 以字符形式 输出 单个字符
      用%d可输出对应的ASCII码
  • printf()格式修饰符
    • l 加d、u前输出long型
    • h 加d、u前输出short型
    • m 输出数据的最小域宽
      • 数据位宽大于m,按实际位宽输出
      • 数据位宽小于m时, 右对齐 ,左补空格
      • 对于浮点数来说, 小数点占一位位宽  
    • -m 左对齐,右补空格
    • .n 显示精度  对浮点数表示输出n位小数,四舍五入
      • 格式: %.nf、%m.nf
        • printf("Value is:%10.4f", 32.6784728):输出32.6785,位宽为10,右对齐
        • n为零时表示保存至整数
    • 输出“%”符号
      • printf("%d %% ", a);  输出为10%
    • 输出“ ' "符号
      • printf(" \'%d\' ", a); 输出为 '10'​​​​​​​

1.2 格式化键盘输入

  • 指定格式从键盘输入指定类型的数据

  • 分隔多个输入数据
    • 空格、Tab或回车
    • 达到输入位宽
    • 遇非法字符
  •  以以下代码为例
int a, b;
scanf("%d %d", &a, &b);
printf("a = %d, b = %d\n", a, b);
  • 格式错误:
    • 若scanf()中变量未使用取地址符&,则程序在编译时会报错
    • 若第二行格式字符写错,即写为”%f %f",则scanf()将读入错误的数据
    • scanf("%d\n", &a); 运行时错误: 不能包含'\n'等转义字符
  • 输入错误:
    • 输入“12 3a",则输出为“a = 12,b = 3”
  • 如何判断输入正确:scanf()的返回值=正确读入的数据项数
  • 格式字符串中的普通字符原样输入,
        

         

  • 格式字符串与格式修饰符
    • 格式字符串:
      • %d:输入十进制int型
      • %f、%e:输入float型(不能指定输入数据的精度,可指定位宽
      • %c:输入一个字符(包括空白字符)
    • 格式修饰符:m、l、L、h、*
      • l 加d、u前输入long型,加f、e前输入double
      • L加f、e前输入long double
      • * 输入项在读后不赋值给相应变量
        • scanf("%2d %*2d %2d", &a, &b); 跳过一个位宽为2的十进制整型
        • scanf("%2d%*2s%2d", &a, &b);效果同上
    • %lf 输入double型,%f输出。原因如下

2. 单个字符的输入和输出

  • 字符常量是用单引号括起来的一个字符
  • 转义字符
    •  一些特殊字符(无法从键盘输入或者另有他用)
    • 所有的ASCII码都可以通过转义方式表示出来
      • 字符B用转义方式表示:’B‘、'\102'、'\x42'
      • ASCII 码值,普通整数,可作算术运算

2.1 用getchar()从键盘输入单个字符

  • ch = getchar()
    • 从键盘接收的字符作为getchar()的函数值
    • 无参数
    • 回车符'\n' 结束字符的输入
    • 输入的字符(包括回车符)都放在输入缓冲区
  • 行缓冲(Line-buffer)输入方式
    • 将输入字符先放入输入缓冲队列中,再从缓冲队列读取字符
    • 直到键入回车符或文件结束符EOF时,程序才认为输入结束
    • 一行输入结束,getchar()才开始从输入缓冲队列读取字符,前面函数没读走的数据仍在缓冲队列中,将被下一个函数读取
                

         一次性把键盘输入的一行字符都放入输入缓冲区,再从输入缓冲区逐个读取字符

  • getchar()以行(而非字符)为单位读取字符,行输入完后再进行读取
    • 实际是按文件的方式读取字符
    • 文件一般都是以行为单位的
  • 有时getchar()也可能返回负值
    • ​​​​​ 若在Unix/Linux下遇到组合键Ctrl+D(Windows下为Ctrl+Z),则返回EOF(一般定义为-1)

2.2 用scanf的%c格式符输入数据

  • scanf()函数的%c格式符输入字符型数据时,空格和回车等空白字符都会被当作有效字符读入
  • 解决
    • 在scanf("%c", &b); 前调用getchar(); 将空格或回车符读
    • 在%c前加一个空格:scanf(" %c", &b);
  • 任意分隔符输入加法算式
#include <stdio.h>
int main()
{
	int data1, data2, sum;
	char op;
	printf("Please enter the expression data1 + data2\n");
	scanf("%d %c%d",&data1, &op, &data2);// %c前加一个空格实现对任意空格的获取
	printf("%d%c%d = %d\n", data1, op, data2, data1+data2);
}

2.3 用putchar()向屏幕输出单个字符 

  • putchar(ch)
    • 向屏幕输出一个字符,字符型变量ch的值

  • printf("%c, %d\n" ,ch ,ch); 
    • 字符型变量可以%c和%d两种格式输出

3. 本章小节

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值