-1

我正在关注 Let us C 这本书,并且以下代码已被证明是完全正确的:

for ( i < 4 ; j = 5 ; j = 0 ) 
    printf ( "%d", i ) ; 

但在 Turbo C 中,它给出了 3 个警告:

代码没有效果。可能分配不正确。'j' 被分配了一个从未使用过的值。

4

5 回答 5

2

如果这本书指出 C 标准允许此代码,那么它是正确的。此代码不违反 C 标准的任何规则,前提是i并且j之前已正确声明(并且printf也已通过包含#include <stdio.h>)。

但是,实际上没有人会编写这样的代码,因为它没有用处。这就是编译器发出警告的原因,因为代码在技术上是允许的,但可能不是程序员想要的。

如果这本书声称这段代码在某些方面有用,那么它可能是一个印刷错误。这肯定是错误的。如果这本书有很多这样的错误,你应该丢弃它。

于 2013-07-17T13:55:20.697 回答
1

我不知道你的书想用这个例子教你什么,但是 AFAIK 的 for 循环应该始终采用以下形式

for ( init; check; next ) {
    /* do something */
}

init在哪里初始化你要使用的东西,检查它是否应该停止或继续,然后执行某种操作。它与

init;
while ( check ) {
    /* do something */
    next;
}

因此,您收到警告是因为:

  • 代码没有效果被称为i < 4。正如您在while表单中看到的那样,这种比较没有以任何方式使用,因此它没有任何效果。
  • 可能分配不正确。被引用到j = 5因为您正在检查分配,女巫将始终评估分配的值(在本例中为 5)
  • 'j' 被分配了一个从未使用过的值,正如它所说,'j' 从未使用过,因为您在此示例中打印了 'i'。

这本书想要做的可能是(i = 5; i < 5; i++)。也许你需要做的是使用一本更好的书。

于 2013-07-17T14:06:41.810 回答
0

它是有效的 C 代码,但几乎毫无意义。这不会正确初始化循环并触发无限循环。循环看起来像

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

第一条语句是初始化器,第二条规定结束情况,最后一条是增量。我会摆脱那本书

于 2013-07-17T13:54:05.250 回答
0

看一下这个。

int i=0;
for(i=0;i<5;i++)
{
    printf("%d",i);
}
于 2013-07-17T13:56:16.053 回答
0

这是一个正确但无限的循环,实例化 for 循环的正确方法是

int i ;
for(i = 0; i< [variable or number];i++){
printf("%d",i);
}

你写的代码是没有意义的,你不能用那个代码做任何事情,实际上它打印了 i 无限时间的值,因为它永远不会改变。我们唯一知道的 i 小于 4。可能输出总是相同的数字。

于 2013-07-17T13:58:59.253 回答