1

我最近学习了 The C Programming Language(第 2 版),并且一直在研究书中的示例。数组给我带来了问题。具体来说,它似乎与类型转换有关。1.6 节的示例读取输入,然后计算有多少字符属于某些类别。当我通过可执行文件传输源代码时,除了没有正确捕获任何数字字符之外,这段代码似乎正在创建段错误。如果我使用标准输入和 ^D 到 EOF,那么它根本不会捕获数字,而是将它们计为其他字符(尽管没有段错误)。

while ((c=getchar())!=EOF)
  if(c>='0'&&c>='9')
    ++ndigit[c-'0'];

我已经通过交换其他部分消除了它是程序的不同部分导致故障的可能性,但如果有帮助,我仍然可以发布其余部分。据我了解,这个循环应该通过输入中的单个字符。如果它们的值介于 0 和 9 之间,则它将字符转换为数字(对应于 ndigit 数组位置 0-9)并将该数组位置增加 1。

K&R 2e 真的过时了吗?字符编码(ASCII vs Unicode)是字符数转换为整数的问题吗?任何意见,将不胜感激。

我不确定如何检查我的编码(如果它甚至很重要),但我的编译器是 gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3

4

2 回答 2

5
if(c>='0'&&c>='9')

你的意思是:

if(c>='0'&&c<='9')

另请检查是否使用 type而不是c正确声明。intchar

于 2013-07-03T14:23:34.487 回答
0

由于我的数组循环中的拼写错误,我被困在这个练习中。

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

本来应该的。。

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

注意i1被转置

于 2013-08-23T12:52:45.783 回答