getchar与putchar的使用以及数据的储存和基本数据类型

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是非法的实数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值