如果c,函数string_to_table在第3次中断

时间:2015-11-24 23:31:15

标签: c string

我正在尝试创建添加两个矩阵的程序。在函数strcat启动时输入类似[12 4]程序崩溃的输入。

我不知道出了什么问题。 func.h由stdio.h,_mingw.h,stdlib.h和string.h

组成
    #include"func.h"
void string_to_table(double **matrix, char inpt[])/*problematic function*/
    {
         printf("convertion start");
        int i=strlen(inpt);
        printf("%i",i);
        int j=1;
        int k=0,l=0;
        char num[128];
        double converted=0;
        printf("breakpoint1");
        while(j<(i-1))
        {
            if(inpt[j]==' ')
            {
                printf("first if");
                converted=atof(num);
                num[0]='\0';
                matrix[k][l]=converted;
                ++l;
                printf("breakpoint2");
            }
            else if(inpt[j]==';')
            {
                printf("second if");
                converted=atof(num);
                num[0]='\0';
                matrix[k][l]=converted;
                ++k;
                l=0;
            }
            else
                {
                    printf("third if");
                   strcat(num,inpt[j]);/*place when everything crashes*/
                }
            ++j;
        }
         printf("convert0 end");
    }
    void add_matrix(double **matrix1, double **matrix2,int i,int j)
    {
        int k=0;
        int l=0;
        while(k<i)
        {
            while(l<j)
            {
                matrix1[k][l]+=matrix2[k][l];
                ++l;
            }
            l=0;
            ++k;
        }
int matrixproccesing(int *i,int *j, char m[])/*sprawdzanie poprawnosci wejscia*/
{
    printf("macro start");
    int columnnum=0,rownum=0,x=0,piv=0,check=0;
    int textsize=strlen(m);
    printf("%i",i);
    printf("loop start");
    printf("%i",textsize);
    while(x<(textsize-1))
    {
        printf("%i",x);
        printf("\n");
        if(x==0)/*czy poczatek to [*/
        {
            if(m[x]!='[')
                return 0;
        }
        else if(x==(textsize-2))/*czy koniec to]*/
        {
            printf("kohec");
            if(m[x]==']')
                break;
            return 0;
        }
        else if((m[x]>47&&m[x]<58)||(m[x]==' ')||(m[x]=='.')||(m[x]==';')||(m[x]=='-'))/*czy liczba*/
        {
            if(m[x]==';')/*czy ilosc liczb w rzedzie taka sama*/
           {
               if(check==0)
               {
                   check=columnnum;
               }
               else if(check!=columnnum)
               {
                   return 0;
               }
               printf("colnum");
               columnnum=0;
               rownum++;
           }
        else if(m[x]==' ')/*czy nowa liczba/kolumna */
            {
                columnnum++;
            }
        }
        ++x;
    }
    *i=(check+1);
    *j=(columnnum+1);
    printf("macro end");
    return 1;
}
int is_same_size(int a, int b,int c ,int d)/*test rozmiaru*/
{
    if((a==c)&(b==d))
        return 1;
    return 0;
}

void print_da_matrix(double **matrix, int i, int j)
{
    int k=0,l=0;
    printf("[ ");
    while(k<i)
    {
        while(l<j)
        {
            printf("%f",matrix[k][l]);
            printf(" ");
        }
        printf(";");
        l=0;
        if(k<(i-1))
            ++k;
    }
    printf("]");
}
void release_the_memory(double **matrix, int i)
{
    int k=0;
    while(k<i)
    {
        free(matrix[k]);
        ++k;
    }
    free(matrix);
    matrix=NULL;
}
}
int main()
{
    int i=0,j=0,m1=0,m2=0,tabcr=0;
    char matrix[512];
    fgets(&matrix,511,stdin);
    double **matrix1;
    double **matrix2;
        if(!matrixproccesing(&i,&j,matrix))
        {
            printf("zle wejscie");
            return 0;
        }
    matrix1=(double**)malloc(i*sizeof(double *));
        while(tabcr<j)
        {
            matrix1[tabcr]=(double*)malloc(j*sizeof(double));
            ++tabcr;
        }
        string_to_table(matrix1,matrix);
        printf("\n");
        printf("podaj druga macierz");
        fgets(&matrix,511,stdin);
        if(!matrixproccesing(&m1,&m2,matrix))
        {
            printf("zle wejscie");
            return 0;
        }
        tabcr=0;
    if(!is_same_size(i,j,m1,m2))
    {
        printf("matrixes have different size.");
        return 0;
    }
    matrix2=(double**)malloc(i*sizeof(double *));
        while(tabcr<j)
        {
            matrix2[tabcr]=(double*)malloc(j*sizeof(double));
            ++tabcr;
        }
    string_to_table(matrix2,matrix);
    add_matrix(matrix1,matrix2,i,j);
   /* print_da_matrix(matrix1,i,j);
    release_the_memory(matrix1,i);
    release_the_memory(matrix2,i);*/
    return 0;
}

0 个答案:

没有答案