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

这是一个统计各个数字,空白符,其他字符的代码,其中
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不可以吗

在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语言

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2019-09-17

意思是:

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

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

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

扩展资料

“0”和‘0’的区别。

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

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

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

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

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

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

本回答被网友采纳
第2个回答  2018-12-04

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时期引入)

第3个回答  2015-05-22

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

第4个回答  推荐于2017-09-02
#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]这会多麻烦啊,

追问

3厄不是,我是意思是直接++ndigit[c]
1那如果我想表示数字0到6出现的个数怎么表示,又不是ndigit[6]

追答

3,你在前面定义c时就有问题,c应该定义为char;这么跟你说,如果像你这样说,那么如果是'0',那么就是++ndigit['0'=48],c是字符型里面是ASCII在做减法,当检测到的数字是'1'时,'1'是字符型,ASCII值为49,'0'的ASCII 值为48,所以当检测到的是'1'时++ndigit[’1‘-’0‘]就是++ndigit[49-48]即为++ndigit[1],如果写成++ndigit[’1‘]即为++ndigit[49]
1,0-6那就改变条件啊,else if(c>='0'&&c<='6') 把9改成6就是!

本回答被提问者采纳
相似回答