注册 登录
编程论坛 C++教室

求助:C++ for循环不能进行的原因

puya 发布于 2011-11-03 09:17, 3295 次点击
#include<iostream>
using namespace std;
void main()
{
    int a[4][4]={
        {1,2,3,4},
        {5,2,8,4},
        {1,9,3,7},
        {5,7,9,2}
    };
    int i=0,j,sum=0;
    cout<<"矩阵为:"<<endl;

    for(;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            cout<<a[i][j]<<'\t';
        }
        cout<<endl;
        
    };//此前为输出矩阵的代码,矩阵能顺利输出,没有错误


    int k=0,l=0;
    for(;k<4;k++)
    {
        for(;l<4;l++)
        {
            if(k==l)
            sum=sum+a[k][l];
                };
            };
    cout<<"k="<<k<<endl;
    cout<<"l="<<l<<endl;
    cout<<"正对角线值"<<sum<<endl;
}
//将 k.l在括号里声明的时候,为什么循环就可以进行?
11 回复
#2
puya2011-11-03 09:19
注:这个程序输出的对角线和值为1,本来应该是8的。我怀疑程序只进行了一次。
#3
puya2011-11-03 09:35
我明白了,l=0应该放在括号里,否则就自增至3就再也变不回0了。
#4
naruto012011-11-03 09:37
嵌套循环的l在进入下一次循环时,没有初始化为0,所以值保持是4

[ 本帖最后由 naruto01 于 2011-11-3 09:43 编辑 ]
#5
cnfarer2011-11-03 09:37
内循环一次之后 l的值恒为4,也就是说,内循环只执行一次!
#6
blue1762011-11-03 09:55
额,很明显啊,如果你k,l放在外面,首先是外层循环,k为0,l为0,然后执行内部循环,此时if判定为假,因此不执行sum赋值那句,然后执行的又是内部循环,k,l依然为0,相等(执行sum赋值)。这样内部循环执行,直到l变为4,此时跳出循环,而sum为1。然后,执行外部循环,k++,变为1,然后执行内部循环,注意!!!由于你的l放在外面,此时l已经为4,内部循环无法执行,直接跳出。然后再执行外部循环,内部循环再也无法执行了。     因此从头到尾,sum的赋值只进行过一次! 另外,for后面不需要加";"
#7
zhangqi_gsts2011-11-03 14:25
....
#8
kuangdang1782011-11-04 17:51
应该把l=0放到内层循环里面,如果像你那样的话,就在k=0这次外层循环时;l=4后就回不去了!以后l恒等于4,;这程序你至少要把l=0放到循环里面!
#9
飞扬_佳2011-11-04 18:17
#10
l9877481102011-11-05 10:29
同意blme176!!!
#11
wangluky2019-08-12 22:28
#include<bits/stdc++.h>
using namespace std;
int n,m;
int g[1001];
int main()
{
    int tum=0;
    scanf("%d %d",&m,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&g[i]);
        tum=tum+g[i];
        if(m>=tum)
        {
            printf("YES");
        }
        else printf("NO");
    }
    return 0;
}
我的也不行啊!
#12
zbjzbj2019-08-12 22:33
&m,&m?
1