getchar与putchar的使用
getchar原型:getc(stdin)
功能:从键盘输入一个字符,返回该字符对应的ASCII值
头文件:stdio.h
举例:char c=getchar():
定义一个字符型变量c,调用getchar获得一个字符数据并保存到变量C当中
同样可以调用格式化输入函数scanf来实现
例:char c;
scanf("%c, &c);
getchar注意事项
1.空格、回车或TAB键均认为是字符
2.输入,回车后,输入流:字符+换行符
getchar从中获取一个字符,换行符会被残留在输入流中。
3.再次调用getchar或scanf输入字符时,实际获取的是上次残留的换行符\n,无法正确获取想要的字符
eg.
#include<stdio.h>
int main()
{
//方案1:a↘b↘
char c1, c2;//定义两个字符型变量
printf("Input two characters:\n");//输入提示
//此时输入流中产生了a,换行符两个字符
c1 = getchar();//从输入流中获取一个字符并保存在c1当中
//此时获取a字符
c2 = getchar();//从输入流中获取剩下的字符并保存在c2当中
//此时获取换行符
//由于char c = getchar()与char c;scanf("%c",&c)等价,所以不用再调用scanf
printf("c1 = %c, c2 = %c\n", c1, c2);//两个getchar所能容纳的字符均被获取,输出
//此时,无法获取b字符
return 0;
}
#include<stdio.h>
int main()
{
//方案2:ab↘
char c1, c2;//定义两个字符型变量
printf("Input two characters:\n");//输入提示
//此时输入流中产生了a,b,换行符三个字符
c1 = getchar();//从输入流中获取第一个字符并保存在c1当中
//此时获取a字符
c2 = getchar();//从输入流中获取第二个字符并保存在c2当中
//此时获取b字符
//由于char c = getchar()与char c;scanf("%c",&c)等价,所以不用再调用scanf
printf("c1 = %c, c2 = %c\n", c1, c2);//两个getchar所能容纳的字符均被获取,输出
//此时,可以获取b字符
return 0;
}
解决方案:
1.每次调用scanf或getchar后,再调用一次getchar用于吸收上次输入缓冲区残留的换行符
e.g:
include<stdio.h>
int main()
{
//方案1:a↘b↘
char c1, c2;//定义两个字符型变量
printf("Input two characters:\n");//输入提示
//此时输入流中产生了a,换行符两个字符
c1 = getchar();//从输入流中获取一个字符并保存在c1当中
//此时获取a字符
getchar();//再次调用getchar函数来吸收掉换行符
c2 = getchar();//从输入流中获取一个字符并保存在c2当中
//此时输入流中已无字符,需要用户继续输入字符b↘
//由于char c = getchar()与char c;scanf("%c",&c)等价,所以不用再调用scanf
//此时第二个getchar获取了字符b
printf("c1 = %c, c2 = %c\n", c1, c2);//两个getchar所能容纳的字符均被获取,输出
//此时,无法获取b字符
return 0;
}
2.stdio.h中的fflush函数清空输入缓冲区fflush(stdin);
*非标准函数,可能会影响程序的可移植性。
putchar输出
putchar原型:putc((c),stdout)
功能:向终端输出一个字符
头文件:stdio.h
举例:putchar(字符常量);
putchar(字符变量);
例:char ch='a'
putchar(ch); : printf("%c", ch)
putchar('a'); : printf("%c", 'a')
数据的储存和基本数据类型:
1.整型与整数常量
1).整型
整型:不存在小数部分的数据类型。除了基本整型int(有符号)外,还有:
short[int]([有符号]短整型)long[int]([有符号]长整型)
unsigned[int](无符号整型)unsigned short[int](无符号短整型)
unsigned long[int](无符号长整型)
其中,整型和长整型的数据长度均为32位,短整型的数据长度均为16位
short型<=int型,long型>=short型
*然而在Turbo C中,int 和 unsigned型数据的长度都只有16位
2).整数(整型常量)
值不超过整型数据的取值范围,就是合法的常量。
表示:十进制、八进制、十六进制
共同点:都有正负号
不同点:
十进制:由阿拉伯数字0~9组成,首位数字不能是0
八进制:由阿拉伯数字0~7组成,首位数字必须是0
十六进制:由阿拉伯数字0~9组成,首位数字前必须有前缀0x或0X
e.g:用这三种进制来分别表示10:10,010,0x10/0X10
判断类型:
1.由整数后的字母后缀表示:
long型:l或L
unsigned型:u或U
unsigned long型:lu或LU
2.根据常量的值来判断(整型的取值范围大小不同)
2.字符型与字符型常量
1)字符型
每个字符型数据在内存中占用一个字节,用于储存他的ASCII码。故C语言中可以用整型来表示字符
例:设ch为字符变量,字符型常量A的ACSII码值是65,则ch = 'A'与ch = '65'等价
整型变量和字符型变量的定义和值都可以相互交换,此时整型变量的取值范围是有效的ASCII码
2)字符型常量
指单个字符,用一对单引号及其所括起来的字符来表示。如'a'、'X'、'?'、' '都是字符型常量
*'a'与'A'是不同的字符型常量,'0'是字符型常量,0是整型常量
转义字符:
\n 换行
\t 横向跳格
\\ 反斜杠
\“ 双引号
\' 单引号
\ddd 1~3位八进制整数所代表的字符 e.g:\102:ASCII码是八进制102的字符
\xhh 1~2位十六进制整数所代表的字符 e.g:\x41:ASCII码是十六进制41的字符
3.实型与实型常量
1)实数类型:浮点型 与float型数据相比,double型数据的精度更高,取值范围大
2)实型常量:十进制浮点数表示法和科学计数法(都是双精度浮点型)
①浮点表示法:正负号、阿拉伯数字、小数点(必须),且小数点的前后至少一边要有数字。即实数的小数形式
②科学计数法:正负号,数字和字母e/E组成。e是指数的标志,在e之前要有数据,e之后的指数只能是整数。即实数的指数形式。
e.g:3.14和6.026E-27是合法的实数,而0.2E2.3和E-5是非法的实数。