在这种情况下,如何猜测输出

时间:2019-05-21 16:05:11

标签: c loops

为什么在一种情况下有一些输出而在另一种情况下没有任何输出?

int i;
for (;i;)
 {
  printf("Hello  ");
 }

输出= 你好你好你好你好....


int i=0;
for (;i;)
 {
  printf("Hello ");
 }

无输出

4 个答案:

答案 0 :(得分:2)

在第一种情况下, i 未初始化,因此行为未定义。在您的情况下, i 具有非空值,并且 for 变为无止境,因为其值不会改变以产生这些打印,但是该行为仍未定义。

在第二种情况下, i 为0,所以永远不会执行 for 的正文

for (;i;)等同于while(i)


默认情况下,变量 not 初始化为0。

如果您要编写5次实例Hello,您可以执行以下操作:

 int i;

 for (i = 5 ;i; --i)
 {
   printf("Hello  ");
 }

该代码与使用其他符号/运算符的代码等效,如果可以帮助您理解:

 int i = 5;

 while (i != 0) {
   printf("Hello  ");
   i -= 1;
 }

并在循环后添加putchar('\n');以打印换行符也不是坏主意

答案 1 :(得分:1)

这是未定义的行为,因为i具有自动存储期限,并且从未初始化。

这意味着访问i处的值是未定义的行为。如果它恰好包含一个非零值,则for循环主体将永远为true(因为循环中没有任何内容会更改i的值)。

第二个示例使用值为零的i显式初始化,这意味着当用作条件语句时,它将被视为false。

答案 2 :(得分:0)

i未初始化,因此在某些情况下,i包含非零数字,因此; i;是真的,因此条件始终会是真的。

如果它们是整数或字符,则始终初始化它们的值。从性能上讲,它几乎不需要您做任何事情,并且可以节省大量的工作,以后可以查找错误。

答案 3 :(得分:0)

第一个示例的行为不确定。

代码的循环部分在功能上等同于:

while (i) {
{
    printf("Hello ");
}

如果i设置为0,则执行将永远不会到达printf。如果i从未初始化,则可能包含任何值。如果它恰好是0,它将永远不会运行,但是如果它不为零,则循环将永远运行。

相关问题