屁哥 发表于 2017-3-17 16:36:03

请教 C语言 课后题 第16课的

                for (i=0; i != 10, j != 10; i++)
答案解释i !=0, j != 10是逗号表达式,只取后边的值j == 10   
能这么理解么(逗号表达式 i !=0,j != 10————i==0, j==0)都取后面的赋值号? 还是怎么回事的

如果这里是for (i=0;j != 10; i++)j != 10这不是都好表达式这要想循环 就必须得满足 条件判断表达式j != 10 呗?

屁哥 发表于 2017-3-17 16:36:33

#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;
}

lumber2388779 发表于 2017-3-17 17:25:02

如果这里是for (i=0;j != 10; i++)
那就跟题意的结果是一样的,因为内部循环后j的值是10
原题主要是让你理解逗号符赋值时是取后边的
比如 b=1;c=2; a=b,c;结果a是2

Icetone 发表于 2017-3-17 21:51:34

本帖最后由 Icetone 于 2017-3-17 22:02 编辑

for (i=0; i != 10, j != 10; i++) { }
//for( ;循环的条件;)
外层循环的条件就是, j 不等于10 的时候才进入循环。
ps:后面的条件把前面的条件顶掉了,如果要两个同时满足写成 for(i=0; i != 10 &&j != 10; i++)
外层循环进行第一次,内层循环10次,此时i=1,j=10;
外层循环想要进行第二次的时候,内层循环把 j 的值已经加到10了,所以外层循环不再进入。
所以一共打印了10个'A';

这些楼主最好亲自试一试,就明白了。

还有楼上的兄弟讲的不准确
逗号是依次向后运算(0.0,也是刚百度了一下才明白这个)
y=4,5; //把4赋值给y,逗号依次运算,到了5,但没有等号进行赋值,所以y=4;
y=(4,5); //括号内的都是赋值给y的值,先把4赋值给y,然后逗号依次运算,把5赋值给y,所以y=5.

屁哥 发表于 2017-3-18 11:37:04

lumber2388779 发表于 2017-3-17 17:25
如果这里是for (i=0;j != 10; i++)
那就跟题意的结果是一样的,因为内部循环后j的值是10
原题主要是 ...

谢谢 解答

屁哥 发表于 2017-3-18 11:37:36

Icetone 发表于 2017-3-17 21:51
for (i=0; i != 10, j != 10; i++) { }
//for( ;循环的条件;)
外层循环的条件就是, j 不等于10 的 ...

谢谢

Icetone 发表于 2017-3-18 12:05:42

屁哥 发表于 2017-3-18 11:37
谢谢

{:5_95:}不客气,大家一起学习。
你问这个问题之前,我还真没有注意过逗号运算符的问题
页: [1]
查看完整版本: 请教 C语言 课后题 第16课的