Weabu 发表于 2022-6-28 12:26:24

for语句

#include <stdio.h>

int main()
{
    int i, j, a;

    for (i = 0; i != 10, j != 10; i++, a++)
    {
      for (j = 0; j < 10; j++)
      {
            putchar('A');
      }
      printf("%d\n", a);
    }
    putchar('\n');

    return 0;
}


输出:    for (i = 0; i != 10, j != 10; i++, a++)
                  ^~
                  |=


这是什么错误?

@风车呼呼呼

jhq999 发表于 2022-6-28 12:35:48

for (i = 0; i != 10, j != 10; i++, a++)

Weabu 发表于 2022-6-28 12:39:14

jhq999 发表于 2022-6-28 12:35
for (i = 0; i != 10, j != 10; i++, a++)

那个红色的是啥?逗号?
我中间打了一个逗号

风车呼呼呼 发表于 2022-6-28 12:40:18

i != 10 && j != 10

Weabu 发表于 2022-6-28 12:44:03

风车呼呼呼 发表于 2022-6-28 12:40
i != 10 && j != 10

为什么不能用逗号隔开呢,以前不是都是这样吗

风车呼呼呼 发表于 2022-6-28 13:01:48

Weabu 发表于 2022-6-28 12:44
为什么不能用逗号隔开呢,以前不是都是这样吗

从来都不行,只有前后可以用逗号写多个表达式,分别作初始条件和每轮循环后要做的变化。中间是判断条件,要么真要么假。如果硬要说是逗号表达式,那么逗号表达式的值是最后一个表达式的值,即 j != 10 为真整体就为真,反之整体为假,与 i != 10 是否满足就无关了。关系表达式 A && B ,A、B同时为真才为真,A || B,A、B有一个是真就为真,如果你企图用逗号来表示两个都要满足,又该如何表示逻辑或呢

桃花飞舞 发表于 2022-6-28 19:37:38

本帖最后由 桃花飞舞 于 2022-6-28 19:40 编辑

Weabu 发表于 2022-6-28 12:44
为什么不能用逗号隔开呢,以前不是都是这样吗

逻辑判断,以前是for(; ;)这样的。两个分号之间是真或假。要不然for(;;)循环怎么和do{}while();        while(){}这些小括号里也是判断的等价呢?

傻眼貓咪 发表于 2022-6-29 11:19:38

Weabu 发表于 2022-6-28 12:44
为什么不能用逗号隔开呢,以前不是都是这样吗

for (表达式, 条件语句, 表达式)

表达式可以多个,
但条件语句只能一个,如:
true and true
true and true and true
不能 true, true

Weabu 发表于 2022-6-29 12:47:09

桃花飞舞 发表于 2022-6-28 19:37
逻辑判断,以前是for(; ;)这样的。两个分号之间是真或假。要不然for(;;)循环怎么和do{}while();        while( ...

好的,谢谢回答

Weabu 发表于 2022-6-29 12:47:57

傻眼貓咪 发表于 2022-6-29 11:19
for (表达式, 条件语句, 表达式)

表达式可以多个,


好的,谢谢回答

Weabu 发表于 2022-6-29 12:50:29

风车呼呼呼 发表于 2022-6-28 13:01
从来都不行,只有前后可以用逗号写多个表达式,分别作初始条件和每轮循环后要做的变化。中间是判断条件, ...

#include <stdio.h>

int main()
{
      int i, j;

      for (i = 0; i != 10, j != 10; i++)
      {
                for (j = 0; j < 10; j++)
                {
                        putchar('A');
                }
      }

      putchar('\n');

      return 0;
}


那为什么论坛里面这个是可以的呢

风车呼呼呼 发表于 2022-6-29 13:18:34

Weabu 发表于 2022-6-29 12:50
#include

int main()


"可以"是指什么?这个和你刚开始的那个甚至 j 都没有初始化,如何去判断 j != 10 呢?初始化之后是可以运行出来,但那是作为逗号表达式来解释,即真假仅由最后一个表达式决定,肯定不是编写初衷。这都属于语义错误,编译器只能给你查出语法错误,不可能知道你实际想做什么
页: [1]
查看完整版本: for语句