鱼C论坛

 找回密码
 立即注册
查看: 1784|回复: 11

[已解决]for语句

[复制链接]
发表于 2022-6-28 12:26:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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++)
                  ^~
                  |=


这是什么错误?

@风车呼呼呼
最佳答案
2022-6-28 13:01:48
Weabu 发表于 2022-6-28 12:44
为什么不能用逗号隔开呢,以前不是都是这样吗

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

使用道具 举报

发表于 2022-6-28 12:35:48 | 显示全部楼层
for (i = 0; i != 10, j != 10; i++, a++)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-28 12:39:14 | 显示全部楼层
jhq999 发表于 2022-6-28 12:35
for (i = 0; i != 10, j != 10; i++, a++)

那个红色的是啥?逗号?
我中间打了一个逗号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-28 12:40:18 | 显示全部楼层
i != 10 && j != 10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-28 12:44:03 | 显示全部楼层

为什么不能用逗号隔开呢,以前不是都是这样吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-28 13:01:48 | 显示全部楼层    本楼为最佳答案   
Weabu 发表于 2022-6-28 12:44
为什么不能用逗号隔开呢,以前不是都是这样吗

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

使用道具 举报

发表于 2022-6-28 19:37:38 | 显示全部楼层
本帖最后由 桃花飞舞 于 2022-6-28 19:40 编辑
Weabu 发表于 2022-6-28 12:44
为什么不能用逗号隔开呢,以前不是都是这样吗


逻辑判断,以前是for(; ;)这样的。两个分号之间是真或假。要不然for(;;)循环怎么和do{}while();        while(){}这些小括号里也是判断的等价呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-29 11:19:38 From FishC Mobile | 显示全部楼层
Weabu 发表于 2022-6-28 12:44
为什么不能用逗号隔开呢,以前不是都是这样吗

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

表达式可以多个,
但条件语句只能一个,如:
true and true
true and true and true
不能 true, true
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,谢谢回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-29 12:47:57 | 显示全部楼层
傻眼貓咪 发表于 2022-6-29 11:19
for (表达式, 条件语句, 表达式)

表达式可以多个,

好的,谢谢回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}


那为什么论坛里面这个是可以的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-29 13:18:34 | 显示全部楼层


"可以"是指什么?这个和你刚开始的那个甚至 j 都没有初始化,如何去判断 j != 10 呢?初始化之后是可以运行出来,但那是作为逗号表达式来解释,即真假仅由最后一个表达式决定,肯定不是编写初衷。这都属于语义错误,编译器只能给你查出语法错误,不可能知道你实际想做什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 05:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表