Id returned 1 exit status

0

A number is said to be capicua when read from left to right is the same as when read from right to left. For example: the number 320023 is capicua , while the number 1872681 is not. Then construct a function in C to see if a read integer is capicua. The function should return 1 if the number is capicua and 0 otherwise. Also write an algorithm that reads "n" numbers and writes next to each of them the message "YES" if the number is "capicua" and "NO" otherwise. Do not use the "if" or "case" commands.

In my algorithm the error mentioned in the title occurs.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define color "color 1F"

int capicua(int n);
int propriedade(int n);
void ler_capicua();

int main(int agrc, char *argv[]){

int n;
system(color);
setlocale(LC_ALL,"");

printf("Digite um número: ");
scanf("%d",&n);
capicua(n);
ler_capicua();
propriedade(n);
}

int capicua(int n){

  int x=n, r=0;

while(x!=0){
    r=r*10;
    r=r+x%10;
    x=x/10;
}

if(n==r){
    printf("%d é um número \"capicua\"",n);
}

else{
    printf("%d não é um número \"capicua\"",n);
}

  sleep(3);
  system("cls");
}

int propriedade(int n){

  int contrario=0, aux=n, x, i;

printf("Digite um número para saber se possui essa propriedade: ");
scanf("%d",&n);

printf("Quantos algarismos esse número possui? ");
scanf("%d",&x);

for(i=0;i<n;i++){
    contrario=contrario*10;
    contrario=contrario+aux%10;
    aux=aux/10;
    if(aux==0) break;
}

if(n==contrario) return 1;
else return 0;

  sleep(3);
  system("cls");
}

void ler_capicua(){
  int n, i;

printf("\nInsira quantidade de números que queria calcular: ");
scanf("%d",&i);

while(i>0){
    printf("\nInsira o número: ");
    scanf("%d",&n);
    if(capicua(n) == 1) printf("SIM");
    else print("NÃO");
    i--;
}   
}
    
asked by anonymous 19.11.2016 / 01:02

1 answer

0

When you run your code the error that appeared was

  

/tmp/ccXQBEq3.o: in the 'read_capicua' function:

     

file.c: (. text + 0x25c): undefined reference to 'print'

     

collect2: error: ld returned 1 exit status

I did not fully test and validate your code, but some best practices I can recommend:

  • Read every error message so you can get a better idea of what is happening. In your case, at least based on what the compiler reported here, it was clear that there is a call to an undefined function called print (this appears well at the end of your code). Switch to printf that works.
  • Use indentation. It is much easier to see the instructions that are part of their functions, condition structures, selection, etc.
  • EDIT : I made a small change to the code, but you may already get used to removing else after return . It is unnecessary.

    See the corrected code:

    #include <stdio.h>
    #include <stdlib.h>
    
    int capicua(int n);
    int propriedade(int n);
    void ler_capicua();
    
    int main(int agrc, char *argv[]) {
        int n;
        printf("Digite um número: ");
        scanf("%d",&n);
        capicua(n);
        ler_capicua();
        propriedade(n);
    }
    
    int capicua(int n) {
        int x = n, r = 0;
        while (x != 0) {
            r=r*10;
            r=r+x%10;
            x=x/10;
        }
        if (n == r)
            printf("%d é um número \"capicua\"",n);
        else
            printf("%d não é um número \"capicua\"",n);
    }
    
    int propriedade(int n) {
        int contrario = 0, aux = n, x, i;
        printf("Digite um número para saber se possui essa propriedade: ");
        scanf("%d",&n);
        printf("Quantos algarismos esse número possui? ");
        scanf("%d",&x);
    
        for (i = 0; i < n; i++) {
            contrario = contrario * 10;
            contrario = contrario + aux % 10;
            aux = aux/10;
            if (aux == 0) break;
        }
    
        if (n == contrario) return 1;
        return 0;
    }
    
    void ler_capicua() {
        int n, i;
        printf("\nInsira quantidade de números que queria calcular: ");
        scanf("%d", &i);
    
        while (i > 0) {
            printf("\nInsira o número: ");
            scanf("%d",&n);
            if (capicua(n) == 1) printf("SIM");
            else printf("NÃO");
            i--;
        }   
    }
    
        
    19.11.2016 / 03:46