What do I need to fix? [Error] ld returned 1 exit status

0

I can not compile this code at all. I've already gotten the &'s within the scanf's and printf's and nothing to change the final result.

Where do 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 error you give is as follows:

  

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

    
asked by anonymous 12.12.2016 / 20:16

2 answers

4

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

Data that is integer needs & ( operator "address of ) to pass the address of the variable. Since the types that are strings array of char do not need to because these variables are already memory addresses for the object's location (the string) / p>

In addition to comparing strings use the strcmp() and not equality operator that will check if the indicated addresses are equal and not if the characters are the same, which is what you want.

The code is a bit disorganized. You do not need as many if , use else if to simplify. There are other things that can be improved. I do not know if the logic is correct.

There are better ways to solve the problem, but I did not want to mess around with the code.

#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);
}

See running on ideone .

    
12.12.2016 / 20:31
3

Your code has a lot of errors.

First, the scanf receives a second memory address. For example, this is true:

scanf("%d", &peso);

This is not:

scanf("%d", peso);

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

scanf("%s", atividadeLvl);

And that's not it:

scanf("%s", &atividadeLvl);

And not even that:

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

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

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

In addition, you declare multiple variables as int , that is, integer, but multiply them by floating-point values such as 1.25 . For this reason, you should use float or double .

And avoid chaining% s of% s too deeply. Use else to get simpler.

And you do not need else if . But you will need #include<conio.h> .

Taking some of the borrowed code from my other answer to solve the problem of #include<string.h> , here's the result 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;
}
    
12.12.2016 / 20:40