在c语言中的ASCII码一般采用,C语言学习笔记(2)

本文介绍了C语言中的数据类型,包括布尔型的模拟实现、整数类型的取值范围通过`limits.h`获取、浮点类型以及字符类型的细节。同时,探讨了`getchar()`和`putchar()`在读写字符时的效率优势和应用场景。
摘要由CSDN通过智能技术生成

. C语言中的布尔类型

在C语言中,是没有布尔类型的,0就是false,非0就是true。

于是,写习惯了Java/C#的我们自然会很不习惯,这个时候,我们不妨用宏定义来使我们的代码看起来更舒服一些。

#define BOOL int

#define TRUE 1

#define FALSE 0

intmain (void)

{

BOOLflag=TRUE;

if(flag)

{

printf("true");

}

else

{

printf("false");

}

}

在C99中,长期缺乏布尔类型的问题得到的解决,但是在目前,C99标准还没有得到很好的推广。暂且不提。

2. limits.h

习惯了平台无关的我们,在学习C语言时,必须需要注意他的平台相关性。其中很典型的例子就是在不同的平台下,不同的编译器下,int的取值范围是不同的。

在C#中,我们可以用Int32.MaxValue来获得,那么在C语言中,我们该怎么获得呢?

在C中,提供了一个头文件limits.h,里面有很多宏定义。

647951_12699622821BxT.png

那么我们就很容易得到int类型的取值范围。

#include 

#include 

#include 

intmain (void)

{

printf("int的最小值是:%d;最大值是:%d",INT_MIN,INT_MAX);

return0;

}

3. 浮点类型

在C语言中,提供了三种浮点类型:分别为

float:单精度浮点数,

double:双精度浮点数,

long double:扩展精度浮点数。

在一般要求不严格的情况下,float就足够了,其次是double,long double几乎不会用到。

在C99中,浮点类型包括两种,分别为实浮点类型,就是我们上面提到的。还有复数类型,分别对应为float_Complex等等。

4. 字符类型

在C语言中,一般采用的ASCII编码,而字符类型又分为有符号型和无符号型。在C语言标准中,对此并无规定,因此是由不同的编译器自己决定。

因此考虑到可移植性,如果涉及到符号相关,我们不要假设char是有符号还是无符号,而用signed和unsigned来显式标识。

由于在C语言中,字符实际上是被作为整数来处理的,因此在C89中,将字符类型和整数类型统称为整值类型。

C语言读入字符不会跳过空白字符。我们可以看一个简单的例子:

intmain (void)

{

charch;

scanf("%c",&ch);

printf("%c",ch);

return0;

}

我现在键入一个换行:

647951_1269962283vx55.png

他也把换行符读入,然后打印出来。

那么我们如何读入一串字符串呢?

intmain (void)

{

charch='a';

intcount=0;

do

{

scanf("%c",&ch);

count++;

}while(ch!='\n');

printf("%d",count-1);

}

当然,我们也可以这样来写:

intmain (void)

{

charch='a';

intcount=0;

scanf("%c",&ch);

while(ch!='\n')

{

count++;

scanf("%c",&ch);

}

printf("%d",count);

}

5. getchar和putchar

在C语言中,为我们提供了专门输入和输出字符的函数,也就是getchar()和putchar().

让我们看下getchar()和putchar()的定义。

_Check_return_ _CRTIMP int __cdecl getchar(void);

_Check_return_opt_ _CRTIMP int __cdecl putchar(_In_ int _Ch);

我们可以看到,其实他们返回的都是int类型的值。OK,让我们看看他们都返回什么。

intmain (void)

{

charc;

intresult;

c=getchar();

result = putchar(c);

printf("\nc:%c;result:%d",c,result);

}

647951_1269962285fDtj.png

我们可以看到,他们都是返回其字符的ASCII码。

那么,既然C语言为我们提供了这样专门的函数,一定说明他在读取和输出字符方法比scanf和printf有着特殊的优势。

A. 由于getchar和putchar函数实现比较简单,因此较之效率更高。

B. 为了额外的效率提升,通常getchar和putchar都是作为宏来实现的。

总之,他们相较之略显重量的scanf和printf效率更高。

另外,我们还可以用getchar来实现读取字符的C语言惯用法。

intmain (void)

{

while(getchar()!='\n');

return0;

}

这样的函数一直读到换行终止。

另外:

intmain (void)

{

charc;

while((c=getchar())==' ');

switch(c)

{

case'a':

printf("a");

break;

case'q':

printf("q");

break;

default:

printf("others");

break;

}

}

我们也可以这样来实现忽略一切空白,当然也可以修改程序使之忽略其他字符。

另外,我们在前文说过,scanf在无法完成彻底模式匹配时,会把剩余的字符放到缓冲区,供下次读取。那么我们来看这样一段代码:

intmain (void)

{

inti ;

charc;

scanf("%d",&i);

c=getchar();

printf("%c",c);

}

647951_1269962286Izju.png

由此可知,getchar()也会首先打缓冲区里去读取字符。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值