int SubMat(MatHandler mat1, MatHandler mat2, MatHandler *ans){
	matrix_t m = *(matrix_t *)mat2;
	if (!mat2) return M_ERR_PTRISNULL;
	for (int i = 0; i < m.cols; ++i){
		for (int j = 0; j < m.rows; ++j){
			int t = idx(i, m.cols, j);
			m.data[t] *= -1;
		}
	}
	return AddMat(mat1, &m, ans);
}
int main(void)

{
    short Tab1[MAX_COL][MAX_COL] ,Tab2[MAX_COL][MAX_COL] ,Tab3[MAX_COL][MAX_COL]={0} 
          ,Vect[MAX_COL]={0},n,val;
    char choix,retour='O';
    
    srand(time(NULL));
    Init(&Tab1[0][0],&Tab2[0][0],&n);
    printf("\n Matrice 1: \n");
    printf(" ----------\n");
    Affiche(&Tab1[0][0],n,n);
    printf("\n");
    printf(" Matrice 2: \n");
    printf(" ----------\n");
    Affiche(&Tab2[0][0],n,n);
    printf("\n");
    system("pause");
    system("cls");
    
    while((retour=='O')||(retour=='o'))
    {
        Menu(&choix);

        switch(choix)
        {
        
            case '1':
                     printf("Valeur du nombre a ajouter a la premiere matrice : ");
                     scanf("%hd",&val);
                     AddVal(&Tab1[0][0],&Tab3[0][0],n,val);
                     printf("\n Resultat : \n");
                     printf(" -----------\n");
                     Affiche(&Tab3[0][0],n,n);
                     printf("\n");
                 break;
                 
            case '2':
                     AddMat(&Tab1[0][0],&Tab2[0][0],&Tab3[0][0],n);
                     printf("\n Resultat : \n");
                     printf(" -----------\n");
                     Affiche(&Tab3[0][0],n,n);
                     printf("\n");
                 break;    
                     
            case '3':
                     printf("Valeur du nombre a soustraire a la premiere matrice : ");
                     scanf("%hd",&val);
                     SousVal(&Tab1[0][0],&Tab3[0][0],n,val);
                     printf("\n Resultat : \n");
                     printf(" -----------\n");
                     Affiche(&Tab3[0][0],n,n);
                     printf("\n");
                 break;
                 
            case '4':
                     SousMat(&Tab1[0][0],&Tab2[0][0],&Tab3[0][0],n);
                     printf("\n Resultat : \n");
                     printf(" -----------\n");
                     Affiche(&Tab3[0][0],n,n);
                     printf("\n");
                 break;
                  
            case '5':
                     printf("Valeur du nombre a multiplier a la premiere matrice : ");
                     scanf("%hd",&val);
                     MultVal(&Tab1[0][0],&Tab3[0][0],n,val);
                     printf("\n Resultat : \n");
                     printf(" -----------\n");
                     Affiche(&Tab3[0][0],n,n);
                     printf("\n");
                 break;
                 
            case '6':
                     MultMat(&Tab1[0][0],&Tab2[0][0],&Vect[0],n);
                     printf("\n Matrice 1 : \n");
                     printf(" -----------\n");
                     Affiche(&Tab1[0][0],n,n);
                     printf("\n");
                     printf("\n Matrice 2 : \n");
                     printf(" -----------\n");
                     Affiche(&Tab2[0][0],n,n);
                     printf("\n Vecteur : \n");
                     printf(" -----------\n");
                     Affiche(&Vect[0],n,1);
                 break;
            case '7': ;
             
        }
        
        if (choix!='7')
        {
            printf("\n\nRetour au menu ? [O/N] \n");
            fflush(stdin);
            scanf("%c",&retour);
            system("cls");
        }
        else
        {
            retour='n';
        }
        
    }
    
    system("pause");
    return(0);               
}