关于C/C++,for循环中的变量问题

如下面代码中,有以下几个问题:1.请问scanf("%d",&i[j]);这段代码中i[j],其中j的变量是for循环外面声明的,还是for循环括号条件里面已经赋值的?v... 如下面代码中,有以下几个问题:
1. 请问scanf ("%d",&i[j]);这段代码中i[j],其中j的变量是for循环外面声明的,还是for循环括号条件里面已经赋值的?

void main ()
{
int j;
int i[5];
int a = 0;
for (int j=1;j<=5;j++)
{
a++;
printf ("请输入第 %d 数字\n",a);
scanf ("%d",&i[j]);
}
}
补充:
for循环中的条件应该是这样的。上面代码写错了,不能直接在条件里面声明的
for (j=1;j<=5;j++)
展开
 我来答
追悔七年
推荐于2017-11-26 · TA获得超过587个赞
知道小有建树答主
回答量:251
采纳率:66%
帮助的人:266万
展开全部
如果你是C语言编译,在for中是不能定义变量的,C++编译器可以,在for中的变量作用域在for代码块内,外部的j被隐藏.j在for中声明时被赋值,是一次性的,for的循环体不包含赋值语句.
VC6中好像这种写法有BUG,for中的变量具有函数的生命周期.之后的版本解决了这个问题.
更多追问追答
追问
是的,for循环里面不能声明的,刚才那段代码for循环中有问题。
追答

如果像你那样写,j的问题不存在了,但是有新问题,你的j在for循环中可以被加到5,如果j=5,那i[j]就溢出了.应该这样写for:

for (j=0;j<sizeof(i);j++)
{
    printf ("请输入第 %d 数字\n",j+1);
    scanf ("%d",&i[j]);
}

变量a都可以不要了.

_梦里还乡
2014-04-11 · TA获得超过239个赞
知道小有建树答主
回答量:366
采纳率:0%
帮助的人:215万
展开全部
这个都没有区别,for(表达式1;表达式2;表达式3)
表达式1是在循环开始前先执行,表达式2时已判断语句,成立则循环执行,表达式是在循环最后执行,你在外面先定义int j, for(j=0;j<5;j++) 这样没问题阿,你也可以前面不定义直接for(int j =0;j<5;j++) ;给你讲一下有个叫做变量的生命周期 说下JAVA的(C好多年没有用了)在循环里申明的变量等循环结束后就释放了,意思就是你在for()里面申明的变量等for结束了这个变量就没有了。
追问
如果是for循环括号条件里面的,那 scanf ("%d",&i[j]);中的j的数值范围只能是1~5吧?
追答
恩恩,是的,
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
beddy1
2014-04-11 · TA获得超过1989个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2207万
展开全部
这样的写法在老的C++标准下肯定是直接编译错误的,for 里面的 j 的作用域是和外面的j一样的。
在新的标准下,for 里面的j作用域会比外面的j深一层,如果编译不会有问题,下面scanf 里面用到的j,肯定是for那定义的j。C++的名称查找规则是由近及远的。
追问
补充:
for循环中的条件应该是这样的。上面代码写错了,不能直接在条件里面声明的
for (j=1;j<=5;j++)

如果是这样的话,j的作用域是外面的还是for循环里面的呢?如果是里面的话,那 scanf ("%d",&i[j]);中的j的数值范围只能是1~5吧?
追答
这样的写法哪来的什么作用域的问题呢,只有一个j,作用域应该很清楚了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朱古力兜
2014-04-11 · 超过24用户采纳过TA的回答
知道答主
回答量:76
采纳率:100%
帮助的人:54.3万
展开全部
是for循环括号条件里面已经赋值的

for循环里面定义的变量具有局部作用域 会屏蔽在其他地方定义的同名变量
在c++里是可以那样写的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闲人123happy
2014-04-11
知道答主
回答量:1
采纳率:0%
帮助的人:1387
展开全部
for循环覆盖
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式