What causes the error "(.text+0x5b5)Undefined Reference to 'printf'"?

Asked

Viewed 856 times

1

#include <stdio.h>

#define MAX 100
#define INVALIDO "Operção Inválida!\n"
#define IDENT "A matriz é identidade\n"
#define NAO_IDENT "A matriz não é identidade\n"
#define SIMETRICA "A matriz é simétrica\n"
#define NAO_SIMETRICA "A matriz não é simétrica\n"
#define ESPARSA "A matriz é esparsa\n"
#define NAO_ESPARSA "A matriz não é esparsa\n"
#define TRIANGULAR_UPP "A matriz é triangular superior\n"
#define TRIANGULAR_DOWN "A matriz é triangular inferior\n"
#define NAO_TRIANGULAR "A matriz não é triangular\n"

typedef enum op {sair = 0, soma, mult, transposta, identidade, simetrica, esparsa, triangular, imprimir}Operacoes;


#include <stdio.h>

int main() {

    int ordem, mat[100][100], x, y, z, escalar, ident=1, simetric=1, espar=0, triangS=1, triangI=1,opera;
    scanf("%d",&ordem);
    for(x=0;x<ordem;x++)
    {
        for(y=0;y<ordem;y++)
        {
            scanf("%d",&mat[x][y]);
        }
    }   
    while(1)
    {
        scanf("%d",&opera);
        switch(opera)
        {
            case (sair):
                return(0);
                break;

            case (soma):
                scanf("%d",&escalar);
                for(x=0;x<ordem;x++)
                {
                    for(y=0;y<ordem;y++)
                    {
                        mat[x][y] = mat[x][y] + escalar; 
                    }
                }                               
                break;  

            case (mult):
                scanf("%d",&escalar);
                for(x=0;x<ordem;x++)
                {
                    for(y=0;y<ordem;y++)
                    {
                        mat[x][y] = mat[x][y] * escalar; 
                    }
                }                               
                break;          

            case (transposta):
                for(x=0;x<ordem;x++)
                {
                    for(y=0;y<ordem;y++)
                    {
                        printf("%d",mat[y][x]); 
                    }
                }                               
                break;      

            case (identidade):
                for(x=0;x<ordem;x++)
                {
                    for(y=0;y<ordem;y++)
                    {
                        if(x == y)
                        {
                            if(mat[x][y] != 1)
                            {
                                ident = 0; 
                            }       
                        } 
                    }
                }
                if(ident == 1)
                {
                    printf(IDENT);
                }       
                else
                {
                    printf(NAO_IDENT);  
                }
                break;

            case (simetrica):
                for(x=0;x<ordem;x++)
                {
                    for(y=0;y<ordem;y++)
                    {
                        if(mat[y][x]!=mat[x][y])
                        {
                            simetric = 0;       
                        } 
                    }
                }   
                if(simetric == 1)
                {
                    printf(SIMETRICA);
                }
                else
                {
                    printf(NAO_SIMETRICA);
                }
                break;

            case(esparsa):
                for(espar=0,x=0;x<ordem;x++)
                {
                    for(y=0;y<ordem;y++)
                    {
                        if(mat[x][y]==0)
                        {
                            espar++;
                        } 
                    }
                }
                if(espar>=(x*y)/2)
                {
                    prinf(ESPARSA);
                }   
                else
                {
                    printf(NAO_ESPARSA);
                }
                break;

            case(triangular):
                for(x=0;x<ordem;x++)
                {
                    for(y=0;y<ordem;y++)
                    {
                        if(x>y)
                        {
                            if(mat[x][y]!=0)
                            {
                                triangS = 0;
                            }
                        }

                        if(y>x)
                        {
                            if(mat[x][y]!=0)
                            {
                                triangI = 0;
                            }
                        }
                    }
                }               
                if(triangS==1)
                {
                    printf(TRIANGULAR_UPP);
                }
                if(triangI==1)
                {
                    printf(TRIANGULAR_DOWN);
                }
                else
                {
                    printf(NAO_TRIANGULAR);
                }               
                break;

            default:
                printf(INVALIDO);

        }   

    }

}

1 answer

1


The 130 line you wrote prinf instead of printf:

if(espar>=(x*y)/2)
{
    prinf(ESPARSA);
}

this is a typo, if there are other error messages it is probably due to the way you are compiling.


For the record, you don’t have to do the include twice:

#include <stdio.h> <-------- aqui

#define MAX 100
#define INVALIDO "Operção Inválida!\n"
#define IDENT "A matriz é identidade\n"
#define NAO_IDENT "A matriz não é identidade\n"
#define SIMETRICA "A matriz é simétrica\n"
#define NAO_SIMETRICA "A matriz não é simétrica\n"
#define ESPARSA "A matriz é esparsa\n"
#define NAO_ESPARSA "A matriz não é esparsa\n"
#define TRIANGULAR_UPP "A matriz é triangular superior\n"
#define TRIANGULAR_DOWN "A matriz é triangular inferior\n"
#define NAO_TRIANGULAR "A matriz não é triangular\n"

typedef enum op {sair = 0, soma, mult, transposta, identidade, simetrica, esparsa, triangular, imprimir}Operacoes;


#include <stdio.h> <-------- aqui
  • My, my, my, my!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.