鱼C论坛

 找回密码
 立即注册
查看: 2257|回复: 2

求助一个c程序的小问题

[复制链接]
发表于 2018-8-3 00:30:50 | 显示全部楼层 |阅读模式

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

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

x
我下面的这个代码问题比较奇妙,我写了2层嵌套循环,但是内层循环居然无法执行,代码如下。(问题在注释处)
我这个代码是写一道数据结构的练习题,求矩阵中马鞍点的算法,矩阵我就用二维数组代替了。本来想自己摸索摸索,结果出了这茬。。。。


#include <stdio.h>
#include <stdlib.h>
#define max_size 50

typedef struct
{
        int min;
        int j;
}Double;

typedef struct
{
        Double data[max_size];
}OverLord;


void check(int a[][4],OverLord *m,int row,int lie)
{
        int i,j,min,max,c,k,flag,b[10];
        for(i=0;i<row;i++)
        {
                for(j=0;j<lie;j++)   //就是在这里,经过我单步调试,发现在这里内层的j循环无法进行,不清楚为啥只能进行i 循环,从而导致结果出错。
                {
                        min=a[i][j];
                        if(a[i][j]<=min)
                        {
                                min=a[i][j];
                                c=j;
                        }
                }
                m->data[i].j=c;  //这里由于内层循环无法进行导致我无法找到每一行的最小值,也就无法继续。
                m->data[i].min=min;
        }
        for(k=0;k<row;k++)
        {
                for(i=0;i<row;i++)
                {
                        flag=0;
                        max=m->data[k].min;
                        if(a[i][m->data[k].j]>max)
                        {
                                flag=0;
                                break;
                        }
                        else
                        {
                                flag=1;
                        }
                }
                if(flag==1)
                        b[k]=m->data[k].j;
        }
        for(i=0;i<row;i++)
                printf("%d ",b[i]);
}



int main()
{
        int row,lie,a[3][4],i,j;
        OverLord *m;
        m=(OverLord *)malloc(sizeof(OverLord));
        printf("请输入数据*2:");
        scanf("%d %d",&row,&lie);
        for(i=0;i<3;i++)
        {
                for(j=0;j<5;j++)
                        scanf("%d",&a[i][j]);
        }
        for(i=0;i<max_size;i++)
        {
                m->data[i].j=0;
                m->data[i].min=0;
        }
        check(a,m,row,lie);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-3 09:12:33 | 显示全部楼层
是不是scanf在接受你的输入时出错,你写的是中间用空格分开,实际没有,导致lie赋值出错?你可以在scanf后面对输入的数据用printf先测试一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-3 17:13:26 | 显示全部楼层
BngThea 发表于 2018-8-3 09:12
是不是scanf在接受你的输入时出错,你写的是中间用空格分开,实际没有,导致lie赋值出错?你可以在scanf后 ...

还是不对,我在两条语句的后面都各加了一个printf,输出值也都正确。我把断点设置在check函数那里,当我输入完矩阵后,开始要进入chcek函数时,我检查lie的值发现列的值为1,可我明明输入的是5.。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 01:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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