首页新闻找找看学习计划

for循环输入,中间如果不加输出(什么输出都行),程序错误

-2
悬赏园豆:50 [待解决问题]
# include<stdio.h>
# include<math.h>
# include<stdlib.h>
# include<stdbool.h>           
#define SAFE 50
struct
{
    int N;              //鳄鱼数量
    float D;            //能跳的最远距离
    struct crocodile *C;
}Lake;      //因为只用到一个此结构体,所以直接声明并定义
struct crocodile
{
    float x, y;         //横纵坐标
    int v;          //是否遍历过(鳄鱼是否被踩过), 0代表否,1代表是
};
float land = 15.0/2;

void CreateLake();
bool DFS(struct crocodile *S);
bool IsSafe(struct crocodile S);
float Distance (struct crocodile a1, struct crocodile a2);

int main()
{
    int i;
    scanf("%d %f", &Lake.N, &Lake.D);
    CreateLake();               //建图
    //for(i=0; i<=Lake.N; ++i)       //检查图创建是否正确
       // printf("%f, %f, %d\n", Lake.C[i].x, Lake.C[i].y, Lake.C[i].v);
    if(DFS(&(Lake.C[0])))  printf("Yes\n");
    else  printf("No\n");
    free(Lake.C);               //一定要释放
    return 0;
}

void CreateLake()
{
    int i;
    Lake.C = malloc(Lake.N +1 * sizeof(struct crocodile));        //N+1方便运算
    Lake.C[0].x = Lake.C[0].y = Lake.C[0].v = 0;            //C[0]当做小岛的中心
    for(i=1; i<=Lake.N; ++i){
        //printf("a\n");                    //这出的问题---------------------------------------------
        Lake.C[i].v = 0;
        scanf("%f %f", &(Lake.C[i].x), &(Lake.C[i].y));
    }
}
bool DFS(struct crocodile *S)
{
    int i;
    if(0==S->x && 0==S->y)          //因为小岛有直径,所以第一次跳,要加上半径,不能和其他一块进行
        for(i=1; i<=Lake.N; ++i){
            if(Lake.D >= (Distance(*S, Lake.C[i]) - land))
                DFS(&(Lake.C[i]));            
        }
    else{
        S->v = 1;                   //遍历(跳)即标记
        if(IsSafe(*S))  return true;        
        else{
            for(i=1; i<=Lake.N; ++i){
                if(!(Lake.C[i].v) && Lake.D >= Distance(*S, Lake.C[i]))
                     DFS(&(Lake.C[i]));        
            }
            return false;
        }

    }
}
bool IsSafe(struct crocodile S)         
{
    if(SAFE <= fabs(S.x)+Lake.D || SAFE <= fabs(S.y)+Lake.D)
        return true;
    else  return false;
}
float Distance (struct crocodile a1, struct crocodile a2)       
{
    return sqrt(pow((a1.x-a2.x), 2) + pow((a1.y-a2.y), 2));
}

在函数CreateLake里的for循环里,如果不加上printf程序运行不正确,这是为什么?求大佬解答

这是MOOC浙江大学数据结构的一道题


第二张图没输出就是没加printf的,跑到那里就卡住了

り罐罐。的主页 り罐罐。 | 初学一级 | 园豆:152
提问于:2019-12-08 16:08

麻烦好好整理一下格式

不如隐茶去 1个月前
< >
分享
所有回答(1)
0

麻烦先把代码格式处理好再发出来

Adming | 园豆:24 (初学一级) | 2019-12-09 14:13

刚刚弄懂Markdown格式,已改

支持(0) 反对(0) り罐罐。 | 园豆:152 (初学一级) | 2019-12-10 14:53

@り罐罐。: 问题出在scanf函数上,百度一个 scanf for 就知道了。 加 printf 可以运行,相当于强制线程切换了。

支持(0) 反对(0) Adming | 园豆:24 (初学一级) | 2019-12-10 15:11

@Adming: 我百度了一下,那是输入字符型的时候会遇到问题,但我是float类型的,为啥还是不行

支持(0) 反对(0) り罐罐。 | 园豆:152 (初学一级) | 2019-12-10 15:53

@り罐罐。: 建议不要用一个scanf接收多个输入,在循环中记得用fflush(stdin);或getchar()来吸收回车

支持(0) 反对(0) Adming | 园豆:24 (初学一级) | 2019-12-10 16:22

@Adming: 可以把那一段的代码打一下吗,因为我实在搞不懂,你说的那两个我也都用了,不行。

支持(0) 反对(0) り罐罐。 | 园豆:152 (初学一级) | 2019-12-10 20:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册