我把一个printf来检查该功能是否有效,但是我不知道为什么它不起作用。

这些数字在函数中都是正确的,但是不会执行。

我不确定为什么该功能无法正常工作,我对C的了解不多,所以如果有人可以帮助我,将不胜感激。

该程序应该通过计算教室中周围人的几率来计算您通过考试的几率。

例:

  P
NXNXNXNXN
ZNZNXXXXX
XNZXNNNZX
ZNXHXXXXZ
NNNNZNNXN


P - professorZ - prepared studentN - unprepared studentX - an empty seatH - Me

输入:

3 4
2 50
X X X X
Z H N X
Z N X X


预期产量:

Sanse za prolaz su 62.50%


得到的输出:

Sanse za prolaz su -0.00


#include <stdio.h>
#include <stdlib.h>
#include <math.h>


    ///FUNKCIJA POSTOTAK
float fudaljenost(int visina, int sirina,char array[visina][sirina])
{
    float postotak=0;
    float udaljenostx=0,udaljenosty=0,udaljenost=0;
    int Hx,Hy;
    int Zx,Zy;
    int Nx,Ny;

    for(int i=0;i<visina+1;i++)
    {
        for(int j=0;j<sirina;j++)
        {
             if(array[i][j]=='H')
             {
                Hx=i;
                Hy=j;
             }

        }
    }

    for(int i=0;i<visina+1;i++)
    {
        for(int j=0;j<sirina;j++)
        {
             if(array[i][j]=='Z')
             {
                Zx=i;
                Zy=j;

                udaljenostx=abs(Hx-Zx);///A
                udaljenosty=abs(Hy-Zy);///B

                printf("Z A=%f B=%f\n",udaljenostx,udaljenosty);
                udaljenost=sqrt((udaljenostx*udaljenostx)+(udaljenosty*udaljenosty));///UDALJENOST

                postotak+=90/(udaljenost*udaljenost);///POSTOTAK
             }
        }
    }

    for(int i=0;i<visina+1;i++)
    {
        for(int j=0;j<sirina;j++)
        {
             if(array[i][j]=='N')
             {
                Nx=i;
                Ny=j;

                udaljenostx=abs(Hx-Nx);///A
                udaljenosty=abs(Hy-Ny);///B
                printf("N A=%f B=%f\n",udaljenostx,udaljenosty);

                udaljenost=sqrt((udaljenostx*udaljenostx)+(udaljenosty*udaljenosty));///UDALJENOST

                postotak-=30/(udaljenost*udaljenost);///POSTOTAK
             }
        }
    }

    return postotak;
}

///FUNKCIJA PROFESOR
float fprofesor(float strogost,int visina, int sirina,char array[visina][sirina])
{
    float postotak=0;
    int Hx,Hy;
    int Px,Py;
    float udaljenostx=0,udaljenosty=0,udaljenost;

    for(int i=0;i<visina+1;i++)
    {
        for(int j=0;j<sirina;j++)
        {
             if(array[i][j]=='H')
             {
                Hx=i;
                Hy=j;
             }

        }
    }


    for(int i=0;i<visina+1;i++)
    {
        for(int j=0;j<sirina;j++)
        {
             if(array[i][j]=='P')
             {
                Px=i;
                Py=j;

                udaljenostx=abs(Hx-Px);///A
                udaljenosty=abs(Hy-Py);///B

                udaljenost=sqrt((udaljenostx*udaljenostx)+(udaljenosty*udaljenosty));///UDALJENOST

                postotak=strogost/(udaljenost*udaljenost);///POSTOTAK
             }



        }
    }

    return postotak;
}
int main()
{
    int i=0,j=0;
    int visina,sirina;
    int prof;
    float strogost;
    float posto1,posto2,posto;
    char Ucionica[50][50]={0};


    float postotak=0;
    float udaljenostx=0,udaljenosty=0,udaljenost=0;
    int Hx,Hy;
    int Zx,Zy;
    int Nx,Ny;

    scanf(" %d%d",&visina,&sirina);
    scanf(" %d%f",&prof,&strogost);

    ///UPIS MATRICE
    for(i=1;i<visina+1;i++)
    {
        for(j=0;j<sirina;j++)
        {
             scanf(" %c",&Ucionica[i][j]);
        }
    }
    Ucionica[0][prof-1]='P';

    posto1 = fudaljenost(visina,sirina,Ucionica);
    posto2 = fprofesor(strogost,visina,sirina,Ucionica);
    posto = posto1-posto2;

    printf("Sanse za prolaz su %.2f",posto);
    return 0;
}


Stackoverflow不允许我在不添加更多单词的情况下发布此内容,因此即时消息使用文本的这一部分添加了更多单词,抱歉,像这样在系统中四处走动的stackoverflow,但我有点用光了时间。

最佳答案

当前代码传递给主要变量char Ucionica[50][50]={0}的强制转换为需要float fprofesor(float strogost,int visina, int sirina,char array[visina][sirina])原型的函数。

从上下文看,[50],[50 []表示可能的最大输入大小,但是该程序将仅使用前几行/列(在示例中为3、4)。无论将使用多少数据,被调用函数中的定义都应与数据大小匹配。

float fprofesor(float strogost,int visina, int sirina,char array[50][50]) { ... }
float fudaljenost(int visina, int sirina,char array[50][50]) { ... }


旁注,gcc -Wall在未使用的变量上标记了很多警告,但在传递与次要数组大小不匹配的数组时没有警告

另外,最好“ #define”最大大小,而不是对50次重复进行硬编码。

关于c - 我调用他们后,我的功能不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59128485/

10-15 06:48