What do I need to fix? [Error] Ld returned 1 Exit status

Asked

Viewed 29,835 times

0

I am not able to compile this code at all. I have already &'s within the scanf's and printf's and nothing to change the end result.

Where I need to change my code?

#include<stdio.h>
#include<conio.h>

int main () {

    int peso, altura, idade, necessidadeCal, atividadeInd;
    char sexo[10], atividadeLvl[30];

    printf("Insira seu peso: ");
    scanf("%d", peso);

    printf("\nInsira sua altura: ");
    scanf("%d", altura);

    printf("\nInsira sua idade: ");
    scanf("%d", idade);

    printf("\nInsira seu sexo: ");
    scanf("%s", sexo);

    printf ("\nEm relacao a atividades fisicas, voce se considera: sedentario, levemente ativo, moderadamente ativo, muito ativo ou extremamente ativo? "); 
    scanf ("%s", atividadeLvl[30]);

    if  (atividadeLvl == "sedentario"){
        atividadeInd = 1.25;
    }
        else {
            if  (atividadeLvl == "levemente ativo"){
                atividadeInd = 1.30;
            }
                else {
                    if  (atividadeLvl == "moderadamente ativo"){
                    atividadeInd = 1.50;
                }
                        else {
                            if  (atividadeLvl == "muito ativo"){
                            atividadeInd = 1.70;
                        }
                                else {
                                    if  (atividadeLvl == "extremamente ativo"){
                                        atividadeInd = 2.00;
                                        }}}}}

        if (sexo == "masculino"){
        peso = 66 + 13.7 * peso;
        altura = 5 * altura;
        idade = 6.8 * idade;
    }
    if (sexo == "feminino"){
        peso = 655 + 9.6 * peso;
        altura = 1.7 * altura;
        idade = 4.7 * idade;
    }

    necessidadeCal = (peso + altura - idade) * atividadeInd;
    printf ("\nO seu consumo ideal e de %d calorias diarias", necessidadeCal);
    return 0;
}

The mistake is this:

C:\Users\Thales\Desktop\Faculdade\PO\Trabalho\collect2.exe [Error] ld returned 1 exit status

  • 1

    Welcome Thales to Sopt, what error is having in the output of the compilation?

  • [Error] Ld returned 1 Exit status

  • 1

    First thing you need to fix is the tab, so you will know which one is of each if. Another thing, scanf you use the '&', when it is whole. Programming is not magic that you will "mess with the &" and it will mysteriously work.

  • Done!! Your answer helps me a lot @bigown... I’ve also added some while loops so that only valid data is accepted. In the end, the code went like this:

2 answers

6

Your code has a lot of errors.

First, the scanf takes a memory address as the second parameter. For example, this is right:

scanf("%d", &peso);

That’s not:

scanf("%d", peso);

Remember that in C, arrays are in many places equivalent to pointers. So this is right:

scanf("%s", atividadeLvl);

And that’s not:

scanf("%s", &atividadeLvl);

And not even that:

scanf ("%s", atividadeLvl[30]);

However, even so, the scanf will not do what you want because it goes into the first space, and will not be able to read something like levemente ativo.

In addition, the operator == when applied to strings that are arrays of caraceters, it will compare whether the address of the strings is the same and not whether the content is the same. This will not work. For this there is the function strcmp that make comparisons of strings. The strcmp makes the lexicographical comparison (more or less alphabetical order, but with ordering defined by the ASCII table where uppercase letters come before lowercase letters). It returns 0 when the strings are equal, -1 if the first precedes the second or 1 if the first succeeds the second.

Also, you declare several variables as int, i.e., integer, but multiplies them by floating point values such as 1.25. For this reason, you should use float or double.

And avoid chaining the elses very deeply. Use the else if to make it simpler.

And you don’t need #include<conio.h>. But you’re gonna need #include<string.h>.

Borrowing some of the code of my other answer to solve the problem of scanf, this is the resulting code:

#include <stdio.h>
#include <string.h>

#if defined(__MINGW32__) || defined(_MSC_VER)
#define limpar_input() fflush(stdin)
#else
#define limpar_input() __fpurge(stdin)
#endif

void trim_end(char *str) {
    int p;
    for (p = strlen(str); isspace(str[p]); p--) {
        str[p] = 0;
    }
}

int main() {

    double peso, altura, idade, necessidadeCal, atividadeInd;
    char sexo[10], atividadeLvl[30];

    printf("Insira seu peso: ");
    scanf("%lf", &peso);

    printf("\nInsira sua altura: ");
    scanf("%lf", &altura);

    printf("\nInsira sua idade: ");
    scanf("%lf", &idade);
    limpar_input();

    printf("\nInsira seu sexo: ");
    fgets(sexo, 10, stdin);
    limpar_input();
    trim_end(sexo);

    printf("\nEm relacao a atividades fisicas, voce se considera: sedentario, levemente ativo, moderadamente ativo, muito ativo ou extremamente ativo? ");
    fgets(atividadeLvl, 30, stdin);
    limpar_input();
    trim_end(atividadeLvl);

    if (strcmp(atividadeLvl, "sedentario") == 0) {
        atividadeInd = 1.25;
    } else if (strcmp(atividadeLvl, "levemente ativo") == 0) {
        atividadeInd = 1.30;
    } else if (strcmp(atividadeLvl, "moderadamente ativo") == 0) {
        atividadeInd = 1.50;
    } else if (strcmp(atividadeLvl, "muito ativo") == 0) {
        atividadeInd = 1.70;
    } else if (strcmp(atividadeLvl, "extremamente ativo") == 0) {
        atividadeInd = 2.00;
    } else {
        printf("Que chato, voce nao informou algo legal.");
        return 1;
    }

    if (strcmp(sexo, "masculino") == 0) {
        peso = 66 + 13.7 * peso;
        altura = 5 * altura;
        idade = 6.8 * idade;
    } else if (strcmp(sexo, "feminino") == 0) {
        peso = 655 + 9.6 * peso;
        altura = 1.7 * altura;
        idade = 4.7 * idade;
    } else {
        printf("Que chato, voce nao informou algo legal.");
        return 1;
    }

    necessidadeCal = (peso + altura - idade) * atividadeInd;
    printf("\nO seu consumo ideal e de %lf calorias diarias", necessidadeCal);
    return 0;
}

5


The code has several errors, probably because it’s trying to do things randomly. Programming is not trial and error, it is studying, understanding every aspect of language, logic, problem and writing code knowing what it is doing.

The data that are integer need & (operator "address of") to pass the variable address. The types that are strings (array of char) do not need because these variables are already memory addresses for the object location (the string of characters).

In addition to this to compare strings use the function strcmp() and no equality operator who will check that the addresses indicated are equal and not that the characters are equal, which is what you want.

The code is a bit disorganized. It doesn’t need so many if, use the else if to simplify. There are other things that can be improved. I don’t know if the logic is correct.

There are better ways to solve the problem, but I didn’t want to mess with the code too much.

#include<stdio.h>
#include<string.h>

int main() {
    int peso, altura, idade, necessidadeCal, atividadeInd;
    char sexo[10], atividadeLvl[30];
    printf("Insira seu peso: ");
    scanf("%d", &peso);
    printf("\nInsira sua altura: ");
    scanf("%d", &altura);
    printf("\nInsira sua idade: ");
    scanf("%d", &idade);
    printf("\nInsira seu sexo: ");
    scanf("%s", sexo);
    printf ("\nEm relacao a atividades fisicas, voce se considera: sedentario, levemente ativo, moderadamente ativo, muito ativo ou extremamente ativo? "); 
    scanf ("%s", atividadeLvl);
    if  (strcmp(atividadeLvl, "sedentario") == 0) {
        atividadeInd = 1.25;
    } else if (strcmp(atividadeLvl, "levemente ativo") == 0) {
        atividadeInd = 1.30;
    } else if (strcmp(atividadeLvl, "moderadamente ativo") == 0) {
        atividadeInd = 1.50;
    } else if (strcmp(atividadeLvl, "muito ativo") == 0) {
        atividadeInd = 1.70;
    }  else if (strcmp(atividadeLvl, "extremamente ativo") == 0) {
        atividadeInd = 2.00;
    }
    if (strcmp(sexo, "masculino") == 0) {
        peso = 66 + 13.7 * peso;
        altura *= 5;
        idade *= 6.8;
    } else if (strcmp(sexo, "feminino") == 0) {
        peso = 655 + 9.6 * peso;
        altura *= 1.7;
        idade *= 4.7;
    }
    necessidadeCal = (peso + altura - idade) * atividadeInd;
    printf ("\nO seu consumo ideal e de %d calorias diarias", necessidadeCal);
}

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

  • Thank you very much!! The suggestions are extremely welcome... I’m not that familiar with programming yet, so it’s still coming out rudimentary. I didn’t know the string comparison function nor this multiplication syntax...

Browser other questions tagged

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