C语言输入及输出以及及scanf输入处理及类型转换

===============================C语言输入及输出============================
输入:scanf()
输出:printf();
printf:
#include <stdio.h>
int printf(const char *format, ...);  //变参函数返回值:成功打印个数
const char *format:封装成的字符,这些字符将显示在屏幕上  

int number = 100;
printf("number = %d\n",number);
%d:数据格式
注:每个对应的变量,它输出类型有所不同

《一》C语言常用的数据格式
	%c    :  字符类型
	%d    :	 整型
	%s    : 字符串类型
	%u    :	无符号类型
	%hu   : 无符号短整型类型
	%hd   :	短整型  short
	%ld   :	长整型
	%f    :	浮点型   float
	%lf   :	长浮点型 double
	%e    :	科学计数型
	%o    :	打印八进制
	%x    :打印十六进制
	%p    :	打印变量指针地址
		
可在打印进制时加入#,将进制符号打印出来
%#o  (八进制)	%#x(十六进制)
0457	              0x457  	 
八进制变量定义:
	int var_8 = 0457;  //系统会认为这个是一个八进制数   数据前面加0
	printf("var_8 = %o\n",var_8);
	
十六进制变量定义:
	int var_16 = 0x457;  //系统会认为这个是一个八进制数 数据前面加0x
	printf("var_16 = %o\n",var_16);
	
scanf用法:
       #include <stdio.h>
       int scanf(const char *format, ...);
	   返回值:const char *format匹配的个数
	   const char *format:匹配缓冲数据格式 
       int num = 0; 
	   scanf("%d",&num); &num...:变量地址
	   
scanf使用建议:
	(1)不要在const char *format参数内添加\n
	(2)不在const char *format参数内添加相关的符号或者是字符
	(3)数据类型格式要与变量类型一致
	(4)数据类型格式与变量取地址个数要相同
	例子:
	int i = 0;
	char j = 0;
	char k = 0;
	scanf("%d%c%c",&i,&j,&k);

===================scanf输入处理及类型转换细节=================================
定义 :
1、scanf输入时,键盘按enter,将\r\n同字符一同放入缓冲区
2、整型、浮点型及字符串匹配数据格式时,会将\r一同带走处理,留下\n
3、对应整型、浮点型及字符串来讲,若缓冲区有\n,不会匹配其字符
4、对应\n来说,数据格式%c认为一个字符

问题一:如何解决%c不匹配上个输入时留下的\n ??
解决方法,清空缓冲区:代码:  while( getchar() != '\n');  //清空缓冲区
ch = getchar():获取缓冲区中的一个字符

 1. 数据类型转换:
模型:  变量  = (转换的类型)
转换的类型:char  short int long long long struct 指针(int *  ... struct *)
 
 2. 合法的类型转,数据类型由低类型转换为高数据类型
char --> short -->int -->long -->long long
如:char ch_number  = 100; 	
	int  int_number = 0;	
	int_number = ch_number;==>编译是这样认为 int_number = (int)ch_number;
	
 3.不合法的类型转,数据类型由高类型转换为低数据类型
long long -->long -->int -->short -->char
如:unsigned char ch_number  = 100; 	
	unsigned int  int_number = 657;	
	ch_number = int_number;  ==>编译是这样认为 ch_number = (unsigned char)int_number;
解:将int_number化为二进制:10 1001 0001  
再根据ch_number位来取int_number二进制位(取低八位)1001 0001

硬件编程当中常使用:
unsigned int *   GPIO_REG = (unsigned int *)0x254D1245
GPIO_REG = 100;

纯软件编程当中常使用:(不合法)
unsigned int *   GPIO_REG = (unsigned int *)0x254D1245  
GPIO_REG = 100;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值