C语言问题,c-'0'是什么意思

这是一个统计各个数字,空白符,其他字符的代码,其中1.c-'0'是什么意思2.intndigit[10];是什么意思3.if(c==''||c=='\n'||c=='\t... 这是一个统计各个数字,空白符,其他字符的代码,其中
1.c-'0'是什么意思
2.int ndigit[10];是什么意思
3.if(c==' '||c=='\n'||c=='\t')的c==''中间要打空格吗
4.printf(",white space=%d,other=%d\n",nwhite,nother);为什么要加第一个,逗号
#include<stdio.h>

main()
{
int c,i,nwhite,nother;
int ndigit[10];
nwhite=nother=0;
for(i=0;i<10;++i)
ndigit[i]=0;
while((c=getchar())!=EOF)
if(c==' '||c=='\n'||c=='\t')
++nwhite'
else if(c>='0'&&c<='9')
++ndigit[c-'0'];
else
++nother;
printf("digits=");
for(i=o;i<10;++i)
printf("%d",ndigit[i]);
printf(",white space=%d,other=%d\n",nwhite,nother);
}
为什么要-‘0’啊,'0‘在这是等于0吗,那为什么要减,直接c不可以吗
展开
 我来答
兔丞飞
高粉答主

推荐于2019-08-23 · 专注娱乐 专注娱乐 专注娱乐
兔丞飞
采纳数:25 获赞数:19893

向TA提问 私信TA
展开全部

在ASCII编码中, 0~9 的编码是 0x30~0x39, 所以当c在‘0'~'9'的范围中时,c - '0' 就相当于计算c的实际数值,例如 c 是 '1', 则 c - '0' = 1, 把字符值转为数字值了 

#include<stdio.h>

int main()

{

int a,b;

a=!0;

b=!!0;

printf("a=%d,b=%d\n",a,b);

return 0;

}

/*

输出结果:a=1,b=0 

*/

扩展资料

0的ASCII码是30,就是先把30转变为与c一样的数据类型【30】,然后用c减去【30】

(1)+,—,*,/运算的两个数中有一个为float或double型,结果是double型,因为统一将所有float型数据都先转换为double型,然后进行运算。 

(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double 
型,然后进行运算,结果是double型。 

(3)字符(char)型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算。字符型可以直接与整型数据进行运算。如果字符型数据与实型数据进行运算,则将字符的ASCII代码转换为double型数据,然后进行运算。 

参考资料:百度百科 - C语言

檀香透窗棂
高粉答主

推荐于2019-09-17 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:269
采纳率:100%
帮助的人:7万
展开全部

意思是:

字符‘0’对应的ASCII码是48,48对应的十六进制数就是0x30,通常我们在编程的时候,用字符转化为数字的时候经常要用到,比如要将‘8’转换为数字8,在语句中这样写就可以了,“ 8+‘0’”。这里的8就是数字。

字符‘0’和数字0的区别:

前者是字符常量,后者是整形常量,它们的含义和在计算机中的存储方式截然不同。但是字符常量可以像整数一样在程序中参与相关运算。

扩展资料

“0”和‘0’的区别。

首先“0”是字符串常量,字符串常量是由一对双引号括起的字符序列。

例如:“CHINA”,“I LOVE YOU”,“123”等都是合法的字符串常量。

‘0’是字符常量,字符串常量和字符常量是不同的量。

1、字符常量由单引号括起来;字符串常量由双引号括起来。

2、字符常量只能是单个字符;字符串常量则可以含一个或多个字符。

参考资料:百度百科——C语言

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
彩虹糖豆Sx
高粉答主

2018-12-04 · 醉心答题,欢迎关注
知道小有建树答主
回答量:458
采纳率:97%
帮助的人:13万
展开全部

c语言'\0' 意思:

字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符"\0" (ASCII码为0)。这是字符串结束的标志。

输出thanks的方法:

#include <stdio.h>

void main()

{

char a;

a=getchar();

if (a=='\0');

printf("thanks");

}

运行时输入:回车,就会显示thanks。

扩展资料

C语言的其他基本数据类型:

1、void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)

2、char:字符型类型数据,属于整型数据的一种。(K&R时期引入)

3、int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入)

4、float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入)

5、double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吉祥二进制
高粉答主

2015-05-22 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84577

向TA提问 私信TA
展开全部

在c语言中,字符是按其所对应的ASCII码来存储的,一个字符占一个字节。第一个ASCII码,对是0,对应的字符是(Null),其实就是‘\0’,即空字符。可以通过如下ASCII码表来查询到。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Alan_Turing__
推荐于2017-09-02 · TA获得超过1201个赞
知道小有建树答主
回答量:369
采纳率:0%
帮助的人:415万
展开全部
#include<stdio.h>
main()
{
int c,i,nwhite,nother;
int ndigit[10];//ndigit[10]用来存放相应的各个数字的次数,ndigit[0]存放0的次数,,,ndight[9]存放9的次数
nwhite=nother=0;
for(i=0;i<10;++i)
ndigit[i]=0;
while((c=getchar())!=EOF)
 if(c==' '||c=='\n'||c=='\t')//中间必须打空格,就像'a'一样,中间是什么就写什么,'\n' '\t'  ' '
++nwhite'
 else if(c>='0'&&c<='9')
   ++ndigit[c-'0'];//这是ASCII码表示的,比如当检测到输入的数字是'0'时++ndigit[c-'0']即为++ndigit[0-0],当检测到输入的数字是'5'时++ndigit['5'-'0'=5]即为++ndigit[5]
      else 
++nother;
printf("digits=");
for(i=o;i<10;++i)
printf("%d",ndigit[i]);
printf(",white space=%d,other=%d\n",nwhite,nother);//这里的逗号是输出时为了分隔各个数字用的,也可以用空格取代,像这样的问题,你可以去掉逗号输出比较就可以自己解决;
}

希望可以帮到你!

更多追问追答
追问
谢谢你,请问
1。ndigit[1]是指数字1出现的个数,那么dnigit[10]就是数字0到9出现的个数吗
2。我用vc试了下,发现不打空格有error(1),打了就没有,为什么他们都说不需要打空格
3。输入的数字’5‘的时候是++ndigit['5'-'0'=5]为什么不能直接++ndigit[5]

4这个没有问题看懂了是跟前面分开用的
追答
1,对,相应脚码对应相应数字出现次数!
2,这个道理很简单,因为他们错了!
3,这是代码简写啊,你想想,如果写++ndigit[0];++ndigit[1];.。。++ndigit[9]这会多麻烦啊,
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(23)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式