for循环问题中的两个数组

时间:2014-05-21 03:37:49

标签: c arrays for-loop

我刚刚完成了C编程语言练习1-13,其中我要制作一个程序来打印水平直方图或垂直直方图。 (我制作横版)

但是我在下面的代码中遇到了一个问题:(让我们称这个代码为#1)

for (i = 0; i < 26; ++i)
    ncc[i] = 0;
    nlc[i] = 0;

我通过这样修复代码:(让我们称这个代码为#2)

for (i = 0; i < 26; ++i)
    ncc[i] = 0; 
for (i = 0; i < 26; ++i)
    nlc[i] = 0;

有两个数组:ncc是一个计算大写字母的数组,nlc是一个计算小写字母的数组。

我提供给您的代码#1对于数组nlc来说有些错误,为了证明这一点,我将向您展示我是如何运行它的,并且只会显示程序中的小写字母直方图部分,因为那是这个问题的重点。

PS <..LOC..> cc histogram-0.c
PS <..LOC..> ./a
i am an arms dealer fitting you with weapons in the form of words
                  SMALL LETTER AND LETTER COUNTS
a | ***** (05)
b | *********************************************************... (It's infinite)

我的问题是:为什么1 for for循环中的2个数组不起作用(代码#1),而1个数组适用于1个循环? (代码#2)

4 个答案:

答案 0 :(得分:2)

假设您的代码如上所示,应该注意,没有大括号的for循环仅在只有一个语句时才起作用。因此,您的第一个示例将仅为数组ncc设置,而您的第二个示例可用。

for (i = 0; i < 26; ++i){
 ncc[i] = 0;
 nlc[i] = 0;
}

^如上所述应该有效。

答案 1 :(得分:0)

for (i = 0; i < 26; ++i)
    ncc[i] = 0; // part of for loop
    nlc[i] = 0; //outside for loop

由于nlc [i] = 0在for循环外,只有i = 27将为零,并且数组中的其他值将是垃圾。

根据c语言的语义,如果循环中没有指定括号,则只有一行被认为是循环的一部分。

将所有元素初始化为零的更好方法是

int ncc[size]={0},nlc[size]={0};

答案 2 :(得分:0)

也许不是这样:

for (i = 0; i < 26; ++i)
    ncc[i] = 0;
    nlc[i] = 0;

应该是这样的:

for (i = 0; i < 26; ++i)
    {
    ncc[i] = 0;
    nlc[i] = 0;
    }

答案 3 :(得分:0)

我将此作为评论,但我的声誉不足......但基本上如果您不熟悉编程,我建议您始终使用大括号来明确说明范围的开始和结束位置。

它通常使代码更具可读性,对编译语言的性能没有影响,并消除歧义。