gpt4 book ai didi

c - 这个数组在每种情况下都在做什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:54 25 4
gpt4 key购买 nike

我正在阅读 K&R 书,但我被数组卡住了(在简介中)。我不想在这里面提出更多问题,但这里的“一般问题”是我不明白如何使用数组,我觉得这本书在介绍时对它们的解释很差。该程序计算数字(分别)、空格和其他。

#include <stdio.h>

int main(void)
{
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 >= '0' && c <= '9')
{
++ndigit[c-'0'];
}

else if(c == ' ' || c == '\n' || c == '\t')
{
++nwhite;
}

else
{
++nother;
}
}

printf("digits =");
for(i = 0; i < 10; ++i)
{
printf(" %d", ndigit[i]);
}
printf(", blanks = %d, other = %d\n", nwhite, nother);

return 0;
}

我确实明白第一个“for”是将 ndigit[i] 的每个值设为 0。之后我就失去了它。它说“如果 i 等于 0 或 9,ndigit[c-'0'] 是什么意思?”真的,那个'0'是什么。最后一部分是它用 i 做了另一个 'for',如果 i 在 ndigit 中,i 的值发生了什么变化?我不应该问这个;这太新手了,但我不知道还能从哪里获得帮助。

最佳答案

数字'0' .. '9'的字符编码是连续的数字,通常是48 .. 57。如果c'0''9' 范围内(if 测试已检查),然后是 ndigit[c-' 0']++ 如果字符为 '0',则下标 0 增加计数,如果字符为 9,则下标 9字符是 '9',对于介于两者之间的值也是如此。 (请注意,您可以使用任何整数值表达式作为下标 - 但该值需要在数组的有效下标范围内,否则行为未定义 - C 中的一个专门术语,意思是“任何事情都可能发生,包括它可能按预期工作,或者使程序、计算机崩溃,或者……任何事情。)

C 要求 10 位数字具有连续的代码值,'0' 的编码低于 '1'。请注意,电话过去会将 0 视为 10(很难发现 0 次点击,但在旋转电话时代却不难发现 10 次点击)。

关于c - 这个数组在每种情况下都在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28268606/

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