我知道在循环后我不应该加分号。但我正在学习,不小心插入了一个。我想确切地知道我的错误发生了什么。所以下次发生类似的事情时,我知道错误的来源。
在下面的代码中,代码的这一部分:
triangularNumber = 0;
for ( n = 1; n <= number; ++n )
;
我在for
循环后意外插入了一个半冒号。当我执行整个代码时,它会提示用户插入一个数字来计算TriangularNumber。但是用分号结果是错误的。例如,当我插入10时,答案应该是55,但是分号错误会给我56. 我想理解为什么56。
完整的代码如下:
#include <stdio.h>
int main(void)
{
int n, number, triangularNumber, counter;
for(counter = 1; counter <=5; counter++)
{
printf("What Triangular Number do you want?");
scanf("%i", &number);
triangularNumber = 0;
for ( n = 1; n <= number; ++n )
**;**
triangularNumber += n;
printf("Triangular number %i is %i\n\n", number, triangularNumber);
}
return 0;
}
答案 0 :(得分:1)
其他答案都很好,但要回答你的问题,为什么你得到你所具体的特定号码(当你输入10而不是56时这将是11),这是因为:
for ( n = 1; n <= number; ++n )
;
除了n
正好比number
好1之外,基本上没有任何内容,因此当number
等于10时,n
将等于11
。
然后,这个:
triangularNumber += n;
只需将triangularNumber
设置为11
,因为在循环之前将其设置为0
,所以当它位于循环之外时,就像它使用分号一样在那里,triangularNumber += n;
基本上等同于triangularNumber = n;
。
顺便提一下,如果你在n
循环中定义了for
,而不是在main()
的开头,那么(你可能需要将你的编译器放在C99中)使用-std=c99
或类似的模式执行此操作):
for ( int n = 1; n <= number; ++n )
;
triangularNumber += n;
然后你已经立即发现了错误,因为程序无法编译,就像你在triangularNumber += n;
外面循环一样{{1将不再在范围内。这是将变量范围限制为所需代码量的一个很好的理由,这通常是一个好主意。
答案 1 :(得分:0)
第二个for
语句没有大括号,因此代码运行;
number 次!
你想:
for ( n = 1; n <= number; ++n )
{
**;**
triangularNumber += n;
}
答案 2 :(得分:0)
关键字for
是每次循环完成时运行的单个语句的前言。由于分号结束语句,因此以下循环在每次迭代时都不会执行任何操作
for ( n = 1; n <= number; ++n ) ;
然后继续执行后续语句(triangularNumber += n;
),该语句执行一次。
同样的原则也适用于if
,while
和do
关键码。在所有这些情况下,为您提供灵活性的是这条规则:一对括号内的所有内容都被视为一种陈述。
因此,您的代码需要看起来像这些示例中的一个,以实现您可能想要的方式。
for ( n = 1; n <= number; ++n ) triangularNumber += n;
-OR -
for ( n = 1; n <= number; ++n )
{
triangularNumber += n;
} //everything between the braces is considered to be the one statement executed by the loop
答案 3 :(得分:0)
这样想:
loop {
do this;
and also this;
}
and more code outside the loop;
现在,如果你有一个&#34 ;;&#34;没有代码,它将如下所示:
loop {
;
}
and more code outside the loop;
;是一个空白语句,每次循环都会运行。
现在如果你删除括号,请看一下:
loop
;
and some code outside of the loop;
由于没有括号,循环只包含下一行代码,在本例中为空行&#34 ;;&#34;。那之后的那一行&#34;以及循环之外的一些代码;&#34;因为它在循环之外,所以无论如何都会被执行。 基本上,如果你没有括号,代码就会被包含在一行代码中。一行之后的任何内容都在括号之外并且不在循环中。
我希望这能解决问题!