gpt4 book ai didi

c - K&R 1.6 示例代码显示长整数

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

K&R 的第 1.6 章给出了计算数字、空格和其他字符的示例代码。接下来是他们的代码,加上 return 0 行。

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 == '\t' || c == '\n')
++nwhite;
else
++nother;

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

return 0;

当我运行它时,无论输入是什么,我都会得到一长串整数(1-7 位数字,一些是正数,一些是负数,无论输入如何都一致)表示 0-9 的计数应该是多少。进程确实返回 0。

(将复制和粘贴示例,但尽管按照 How to enable Ctrl+C/Ctrl+V for pasting in the Windows command prompt 上的这些说明进行操作,但我也无法使其在 cmd 中工作。)

怎么了?

最佳答案

查看您的这部分代码:

for (i = 0; i < 10; ++i);
ndigit[i] = 0;

它的作用与此相同(我只将第一行拆分为两行并且取消了第二行的缩进):

for (i = 0; i < 10; ++i)
;

ndigit[i] = 0;

所以 for 循环有一个空主体 - 它只会增加变量 i 到它达到值 的点10

所以下一个命令

ndigit[i] = 0;

这样做:

ndigit[10] = 0;

这与您的意图完全不同 - 您想要执行此操作:

ndigit[0] = 0;
ndigit[1] = 0;
ndigit[2] = 0;
.
.
ndigit[9] = 0;

由于您没有执行这 10 次初始化分配,因此值是 - 而不是零 - 未定义,因此它们包含随机(任意)值。

关于c - K&R 1.6 示例代码显示长整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40202250/

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