How to assign a value treated in the function to my vector?

1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define TAM_Min 1
#define TAM_Max 500

/*
Sintese
Objetivo: Classificar animais de um zoologico segundo seu peso
Entrada: Numeros de animais do zoologico, e para cada animal o numero de identificacao e o peso em gramas
Saída: Identificacao, peso do animal mais pesado, a identificacao e o peso do animal mais leve, e a quantidade
de animais de peso menor que o peso medio de todos os animais

*/

int le_valida_codigo_animal(int cod[], char titulo[]);
int le_valida_inteiro(int ValorMin, int ValorMax, char texto[]);


int main() {
    int i, num_animais, cod_animal[TAM_Max];
    float peso_animal[TAM_Max];

    //validar numero de animais
    printf("#--- Cadastro de animais ---#");
    num_animais =le_valida_inteiro(TAM_Min, TAM_Max, "\nDigite o numero de animais do zoologico:");

    for(i=1;i<=num_animais;i++){

        cod_animal[i] = le_valida_codigo_animal(cod_animal[i], "Digite o codigo de identificacao dos animais:");


        printf("Digite o peso (em gramas) do animal:");
        scanf("%d", &peso_animal[i]);
        system("cls");
    }

    return 0;
}

int le_valida_inteiro(int ValorMin, int ValorMax, char texto[]){
    int num_animais=0;
    do{

        printf(texto);
        scanf("%d", &num_animais);

        if(num_animais<ValorMin||num_animais >ValorMax){
            printf("\nValor invalido.\nDigite um numero ate 500!");
        }

    }while(num_animais<ValorMin||num_animais >ValorMax);
    return num_animais;
}

int le_valida_codigo_animal(int cod[], char titulo[]){

    char cod_an[0];

    do{
        printf(titulo);
        scanf("%d", &cod);
        if(cod == '
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define TAM_Min 1
#define TAM_Max 500

/*
Sintese
Objetivo: Classificar animais de um zoologico segundo seu peso
Entrada: Numeros de animais do zoologico, e para cada animal o numero de identificacao e o peso em gramas
Saída: Identificacao, peso do animal mais pesado, a identificacao e o peso do animal mais leve, e a quantidade
de animais de peso menor que o peso medio de todos os animais

*/

int le_valida_codigo_animal(int cod[], char titulo[]);
int le_valida_inteiro(int ValorMin, int ValorMax, char texto[]);


int main() {
    int i, num_animais, cod_animal[TAM_Max];
    float peso_animal[TAM_Max];

    //validar numero de animais
    printf("#--- Cadastro de animais ---#");
    num_animais =le_valida_inteiro(TAM_Min, TAM_Max, "\nDigite o numero de animais do zoologico:");

    for(i=1;i<=num_animais;i++){

        cod_animal[i] = le_valida_codigo_animal(cod_animal[i], "Digite o codigo de identificacao dos animais:");


        printf("Digite o peso (em gramas) do animal:");
        scanf("%d", &peso_animal[i]);
        system("cls");
    }

    return 0;
}

int le_valida_inteiro(int ValorMin, int ValorMax, char texto[]){
    int num_animais=0;
    do{

        printf(texto);
        scanf("%d", &num_animais);

        if(num_animais<ValorMin||num_animais >ValorMax){
            printf("\nValor invalido.\nDigite um numero ate 500!");
        }

    }while(num_animais<ValorMin||num_animais >ValorMax);
    return num_animais;
}

int le_valida_codigo_animal(int cod[], char titulo[]){

    char cod_an[0];

    do{
        printf(titulo);
        scanf("%d", &cod);
        if(cod == '%pre%'){
            printf("O codigo deve nao pode ser vazio!");
        }

    }while(cod == '%pre%');
}
'){ printf("O codigo deve nao pode ser vazio!"); } }while(cod == '%pre%'); }

Error received

  

C: \ Users \ lain \ Desktop \ c.c In function 'main':   C: \ Users \ lain \ Desktop \ c.c [Warning] passing argument 1 of   'le_valida_codigo_animal' makes pointer from integer without a cast   18 5 C: \ Users \ lain \ Desktop \ c.c [Note] expected 'int *' but argument is   of type 'int' C: \ Users \ lain \ Desktop \ c.c In function   'le_valida_codigo_animal': C: \ Program   Files \ Dev-Cpp \ MinGW64 \ x86_64-w64-mingw32 \ bin \ ld.exe reopening   C: \ Users \ lain \ Desktop \ c.exe: Permission denied

    
asked by anonymous 28.03.2018 / 20:31

1 answer

2

I'll give an improvement to your code:

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

#define TAM_MIN 1
#define TAM_MAX 500

/*
Síntese
Objetivo: Classificar animais de um zoológico segundo seu peso.
Entrada: Números de animais do zoológico, e para cada animal,
         o número de identificação e o peso em gramas.
Saída: A identificação e peso do animal mais pesado, a identificação
       e o peso do animal mais leve, e a quantidade de animais de
       peso menor que o peso médio de todos os animais.
*/

int le_valida_codigo_animal(char *titulo);
int le_valida_inteiro(int valor_min, int valor_max, char *texto);

int main() {
    int cod_animal[TAM_MAX];
    float peso_animal[TAM_MAX];

    printf("#--- Cadastro de animais ---#");
    int num_animais = le_valida_inteiro(TAM_MIN, TAM_MAX, "\nDigite o número de animais do zoológico:");

    for (int i = 1; i <= num_animais; i++) {

        cod_animal[i] = le_valida_codigo_animal("Digite o codigo de identificacao dos animais:");

        printf("Digite o peso (em gramas) do animal:");
        scanf("%f", &peso_animal[i]);
        system("cls");
    }

    return 0;
}

int le_valida_inteiro(int valor_min, int valor_max, char *texto) {
    int num_animais = 0;

    while (1) {
        printf("%s", texto);
        scanf("%d", &num_animais);

        if (num_animais >= valor_min && num_animais <= valor_max) {
            return num_animais;
        }
        printf("\nValor invalido.\nDigite um número entre %d e %d!", valor_min, valor_max);    
    }
}

int le_valida_codigo_animal(char *titulo) {
    while (1) {
        int cod = 0;
        printf("%s", titulo);
        scanf("%d", cod);
        if (cod != 0) return cod;
        printf("O codigo deve nao pode ser vazio!");
    }
}

The main problem is that your le_valida_codigo_animal function was set incorrectly. int cod[] as a parameter is equivalent to int *cod . When you then use scanf("%d", &cod); , it occurs that cod is already a pointer (that is, a memory address), so the correct one would be scanf("%d", cod); . When using &cod , you give the address of a pointer, that is, a pointer pointer, and that will not be what you want.

However, it happens that you want to return the code in le_valida_codigo_animal , so there's no reason to receive it as a parameter.

As for printf(texto); , it is best to use printf("%s", texto); because this ensures that the text will play even if it contains things that could be confused with string formatters. For example, imagine a scenario that texto is "Concluido 50% ou mais" . In this scenario, using printf(texto); would give stick because this " % " would be confused as part of the format string. The solution therefore is to use printf("%s", texto); .

    
28.03.2018 / 23:50