gpt4 book ai didi

c - 怀疑使用数组和切换?

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:25 25 4
gpt4 key购买 nike

语句ndigit[c-'0']的作用是什么?我正在使用 ansi c。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
int c, i, ndigit[10];
for(i = 0; i < 10; i++)
ndigit[i]=0;
while((c = getchar())!= EOF)
{
switch(c)
{
case '0' :case '1' :case '2' :case '3' :case '4' :case '5' :case '6' :case '7' :case '8' :case '9' : ndigit[c-'0']++;
break;
}
}
printf("digits=");
for(i=0;i<10;i++) printf("%d",ndigit[i]);
return 0;
}

最佳答案

c 是一个 ascii 字符值(尽管以整数类型存储)。例如字符“0”在 ascii 中为 48 ,因此如果 getchar 返回字符“0”,则 c 的整数值为 48。

c - '0' 对两个字符值进行减法(好的,它在减法之前将 '0' 转换为整数 48),给出一个准备好索引到数组中的整数。

所以 char '1' 变成整数 1,char '2' 变成整数 2,等等。

对于一组已知的值,它只是一种将 ascii 字符值转换为整数值的快速方法。对于超出预期范围“0”-“9”的字符,它会产生奇怪的结果——例如如果你用字符 '+' 这样做,你会得到 -5 这不是一个好的数组索引。不过这没关系,因为 switch 语句会检查它是否在“0”-“7”范围内。

关于c - 怀疑使用数组和切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18161198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com