c程序问题9----关于for循环赋初值--2
答案:2 悬赏:0 手机版
解决时间 2021-03-29 20:18
- 提问者网友:谁的错
- 2021-03-29 03:50
c程序问题9----关于for循环赋初值--2
最佳答案
- 五星知识达人网友:时间的尘埃
- 2021-03-29 04:15
这是我的测试程序:
#include
int main()
{
int i;
int j;
for(i=0,j=0;i<10,j<11;i++,j++)
{
printf("%d %d\n",i,j);
}
getchar();
return 0;
}
编译时会提示:warning: left-hand operand of comma expression has no effect,也就是for的第二个表达式逗号前面的没有什么作用,
其判断的时候,只会判断j<11是否成立。
这个程序的输出结果为:
0-10。
若将j<11,修改为j<8,则输出 0-7. 也就是说i<10没有什么约束力。
2:之所以能够进行计算,原因就是上面的原因,第一个for进行判断的时候,只判断i<10是否成立,成立就进行循环。i=1<10成立,所以进行循环了。第一个for至于j,k参加的计算第一次的结果不可预料,因为没有赋初值。变量使用之前最后初始化,这是一个好的习惯,否则后面可能想使用的时候,你完了赋值,造成不可预料的结果,而且检查错误时也不易发现。
3:隐患:一是JK没有初始化。二是这就是一个测试程序,像10这种循环限制结束条件都是自己知道的,一般实际编程中,不会出现这样的具体数字。因为修改麻烦。追问答案非常详细, 想问一下你是用什么做编译的, 因为你的程序我在vc6上面并没有warning出现。追答我是用gcc编译的。
#include
int main()
{
int i;
int j;
for(i=0,j=0;i<10,j<11;i++,j++)
{
printf("%d %d\n",i,j);
}
getchar();
return 0;
}
编译时会提示:warning: left-hand operand of comma expression has no effect,也就是for的第二个表达式逗号前面的没有什么作用,
其判断的时候,只会判断j<11是否成立。
这个程序的输出结果为:
0-10。
若将j<11,修改为j<8,则输出 0-7. 也就是说i<10没有什么约束力。
2:之所以能够进行计算,原因就是上面的原因,第一个for进行判断的时候,只判断i<10是否成立,成立就进行循环。i=1<10成立,所以进行循环了。第一个for至于j,k参加的计算第一次的结果不可预料,因为没有赋初值。变量使用之前最后初始化,这是一个好的习惯,否则后面可能想使用的时候,你完了赋值,造成不可预料的结果,而且检查错误时也不易发现。
3:隐患:一是JK没有初始化。二是这就是一个测试程序,像10这种循环限制结束条件都是自己知道的,一般实际编程中,不会出现这样的具体数字。因为修改麻烦。追问答案非常详细, 想问一下你是用什么做编译的, 因为你的程序我在vc6上面并没有warning出现。追答我是用gcc编译的。
全部回答
- 1楼网友:梦中风几里
- 2021-03-29 05:20
1、不赋初值不代表没有值;未赋初值情况下,变量J K也有值,只是这个值不确定而已。
2、表达式2可以用逗号,代表多个条件,判断顺序是从左到右依次判断
3、隐患就是JK未赋初值,最外层循环判断过程可能出现意想不到的情况。比如,如果J、K随机分配到的内存中的数据是10000,则,最外层循环直接失效
2、表达式2可以用逗号,代表多个条件,判断顺序是从左到右依次判断
3、隐患就是JK未赋初值,最外层循环判断过程可能出现意想不到的情况。比如,如果J、K随机分配到的内存中的数据是10000,则,最外层循环直接失效
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯