Ir ao conteúdo
  • Cadastre-se

C nao consigo resolver dois problemas no codigo


Visitante

Posts recomendados

#include<stdio.h>



void saindo ();
void cadastro();	
void leite_total();
void leite_abate();
 

	struct vacas{
	int cod;
	float qtdalim;
	int ano_nas;
 	float leite;	
 	int atual;
 	int ano=2018;
	char op  ;	
	int abate;
   
 
	};
	int i=1,j,cont,pos, esc ;
	struct vacas vet[5];//nome da estrutura e vet 
int main(){

    system("color b");
    
     do{
     system("cls");
     system("color b");
       printf("\n ------------------------------------------------------------- \n ");
       printf("\n  [1]-CADASTRO  \n  [2]-TOTAL DE LEITE PRODUZIDO POR SEMANA  \n  [3]-QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA \n  [4] TOTAL DE LEITE PRODUZIDO POR SEMANA POS ABATE \n  [5]-QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA POS ABATE \n  [6]-QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA \n  [7]-SAIR  ");
       printf("\n ------------------------------------------------------------- \n ");
       printf("=> "); fflush(stdin); scanf("%d",&esc);
   	}while( esc !=1 && esc != 2 && esc != 3 && esc !=4); //para sair do laço e nescessario que seja diferente das opções existentes
   switch (esc){
    case 1: 
	 cadastro(); 
       break;
    case 2:
        leite_total();
      break;
	case 3:
        
      break;
	case 4:
        return 0;
      break;
    default:
        printf("Opcao invalida");
  			break;
	}
   return 0;
  }
 void cadastro(){
	do{
    system("color b");
    system("cls");
    system("color b"); 
    volta:
	system("cls");	 
    printf("\n ---------------------------------------------------------------------------------\n ");
    printf("\n Entre com codigo do Gado: \n "); scanf("%i",&vet[cont].cod); fflush(stdin);
	printf("\n Entre Com Ano De nascimento do Gado: \n "); scanf("%i",&vet[cont].ano_nas); fflush(stdin);
	printf("\n Entre Com a Quantidade de Alimento : \n"); scanf("%f",&vet[cont].qtdalim); fflush(stdin);
	printf("\n Entre com A quantidade De leite produzida Semanalmente: \n"); scanf("%f",&vet[cont].leite); fflush(stdin); 
	printf("\n Deseja Continuar[s/n]: ");scanf("%c",&vet[cont].op); fflush(stdin);
    printf("\n ---------------------------------------------------------------------------------\n ");
	vet[cont].atual=vet[cont].ano-vet[cont].ano_nas;// traz a idade de cada boi
	if(vet[cont].op ='s'){
		cont++;
		goto volta;   // vai adiconando os cadastros dos bois muuuuuu
	  }               
  	if(vet[cont].op ='n'){
  		main();
  	}
 	}while(vet[cont].op !='n');//ESSA PARTE ESTA DANDO ERRO ELA NAO PARA QUANDO DIGITO n
}


void leite_total()
{
 float leitetotal=0;
for(;i<cont;i++){
	leitetotal= leitetotal+vet[cont].leite; //ESSA PARTE ESTA DANDO ERRRO NAO SOMA  O TOTOAL DE LEITE
}
printf(" total de leite produzido de todas as vacas e  :.. .. %f \n ",leitetotal);
system("pause");
main();
}
void leite_abate(){
	if( vet[cont].atual >5 ){
		
	vet[pos].leite=vet[pos].leite+vet[pos].leite;
	}	
}
void saindo (){
	  printf("\n ------------------------------------------------------------- \n ");
}

 A PARTE DA FUNÇAO LEITE ABTE NAO ESTA SOMANDO EA PARTE DO  DESEJA CONTIINUARA TAMBEM NAO

Link para o comentário
Compartilhar em outros sites

Tem que usar dois iguais nas comparações

if(vet[cont].op ='s'){

if(vet[cont].op =='s'){

 

if(vet[cont].op ='n'){

if(vet[cont].op =='n'){

 

Com um igual só ele faz duas operaçoes

primeiro ele coloca o valor que era pra comparar na variavel

depois faz o IF e vai dar sempre resposta positiva porque igualou a variavel

 

O outro erro, desconfio que esta no FOR

nunca vi um FOR com uma construção assim

 

for(;i<cont;i++){

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@ABC DOS PENTEST Olá. Cara, não ajustei todas as funções, apenas o função onde está dando erro

Segue o código:

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

void saindo ();
void cadastro();
void leite_total();
void leite_abate();

struct vacas {
    int cod;
    float qtdalim;
    int ano_nas;
    float leite;
    int atual;
    int ano;
    int abate;
};

int i, j, cont = 0, pos, esc; // contador inicia com o valor 0

struct vacas vet[5];

void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}

int main() {

    system("color b");

    do {
        system("cls");
        system("color b");
        printf("\n -------------------------------------------------------------\n");
        printf("\n[1] - CADASTRO\n[2] - TOTAL DE LEITE PRODUZIDO POR SEMANA \n"
               "[3] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA\n"
               "[4] - TOTAL DE LEITE PRODUZIDO POR SEMANA POS ABATE\n"
               "[5] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA POS ABATE\n"
               "[6] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA \n[7] - SAIR");
        printf("\n ------------------------------------------------------------- \n ");
        printf("=> ");
        scanf("%d", &esc);
        limpa_linha();

        switch (esc) {

        case 1:
            cadastro();
            break;
        case 2:
            leite_total();
            break;
        case 3:

            break;
        case 4:

            break;
        case 5:

            break;
        case 6:

            break;
        case 7:

            break;
        default:
            printf("Opcao invalida");
            break;
        }

    } while (esc != 7); //para sair do laço e nescessario que seja diferente das opções existentes

    return 0;
}

void cadastro() {

    char opcao;

    do {
        system("color b");
        system("cls");
        system("color b");
        system("cls");
        printf("\n ---------------------------------------------------------------------------------\n ");
        printf("\n Entre com codigo do Gado: ");
        scanf("%i", &vet[cont].cod);
        limpa_linha();

        printf("\n Entre Com Ano De nascimento do Gado: ");
        scanf("%i", &vet[cont].ano_nas);
        limpa_linha();

        printf("\n Entre Com a Quantidade de Alimento: ");
        scanf("%f", &vet[cont].qtdalim);
        limpa_linha();

        printf("\n Entre com A quantidade De leite produzida Semanalmente: ");
        scanf("%f", &vet[cont].leite);
        limpa_linha();

        printf("\n Deseja Continuar? [s/n]: ");
        scanf("%c", &opcao);
        limpa_linha();

        printf("\n ---------------------------------------------------------------------------------\n ");

        vet[cont].ano = 2018;
        vet[cont].atual = vet[cont].ano - vet[cont].ano_nas;// traz a idade de cada boi

        printf("Idade: %d\n", vet[cont].atual);

        system("pause");

        cont++; // contador é incrementado em 1

    } while (opcao != 'n');
}


void leite_total()
{
    float total_leite = 0;
    for (i = 0; i < cont; i++) {
        total_leite += vet[i].leite;
    }
    printf(" total de leite produzido de todas as vacas e  :.. .. %.2f \n", total_leite);
    system("pause");
    main();
}

void saindo () {
    printf("\n ------------------------------------------------------------- \n ");
}

Creio que agora que está ajustada a questão do contador você vai saber resolver o restante do exercício

Obs: Não recomendo fazer uso do comando fflush(stdin);. Para evitar o uso desse comando, estou fazendo uso de uma função para limpar a sujeira do buffer 

Link para o comentário
Compartilhar em outros sites

13 horas atrás, giu_d disse:

@ABC DOS PENTEST Olá. Cara, não ajustei todas as funções, apenas o função onde está dando erro

Segue o código:


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

void saindo ();
void cadastro();
void leite_total();
void leite_abate();
void qtdabate();
struct vacas {
    int cod;
    float qtdalim;
    int ano_nas;
    float leite;
    int atual;
    int ano;
    int abate;
};

int i, j, cont = 0, pos, esc; // contador inicia com o valor 0

struct vacas vet[5];

void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}

int main() {

    system("color b");

    do {
        system("cls");
        system("color b");
        printf("\n -------------------------------------------------------------\n");
        printf("\n[1] - CADASTRO\n[2] - TOTAL DE LEITE PRODUZIDO POR SEMANA \n"
               "[3] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA\n"
               "[4] - TOTAL DE LEITE PRODUZIDO POR SEMANA POS ABATE\n"
               "[5] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA POS ABATE\n"
               "[6] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA \n[7] - SAIR");
        printf("\n ------------------------------------------------------------- \n ");
        printf("=> ");
        scanf("%d", &esc);
        limpa_linha();

        switch (esc) {

        case 1:
            cadastro();
            break;
        case 2:
            leite_total();
            break;
        case 3:

            break;
        case 4:

            break;
        case 5:

            break;
        case 6:

            break;
        case 7:

            break;
        default:
            printf("Opcao invalida");
            break;
        }

    } while (esc != 7); //para sair do laço e nescessario que seja diferente das opções existentes

    return 0;
}

void cadastro() {

    char opcao;

    do {
        system("color b");
        system("cls");
        system("color b");
        system("cls");
        printf("\n ---------------------------------------------------------------------------------\n ");
        printf("\n Entre com codigo do Gado: ");
        scanf("%i", &vet[cont].cod);
        limpa_linha();

        printf("\n Entre Com Ano De nascimento do Gado: ");
        scanf("%i", &vet[cont].ano_nas);
        limpa_linha();

        printf("\n Entre Com a Quantidade de Alimento: ");
        scanf("%f", &vet[cont].qtdalim);
        limpa_linha();

        printf("\n Entre com A quantidade De leite produzida Semanalmente: ");
        scanf("%f", &vet[cont].leite);
        limpa_linha();

        printf("\n Deseja Continuar? [s/n]: ");
        scanf("%c", &opcao);
        limpa_linha();

        printf("\n ---------------------------------------------------------------------------------\n ");

        vet[cont].ano = 2018;
        vet[cont].atual = vet[cont].ano - vet[cont].ano_nas;// traz a idade de cada boi

        printf("Idade: %d\n", vet[cont].atual);

        system("pause");

        cont++; // contador é incrementado em 1

    } while (opcao != 'n');
}


void leite_total()
{
    float total_leite = 0;
    for (i = 0; i < cont; i++) {
        total_leite += vet[i].leite;
    }
    printf(" total de leite produzido de todas as vacas e  :.. .. %.2f \n", total_leite);
    system("pause");
    main();
}

void saindo () {
    printf("\n ------------------------------------------------------------- \n ");
}

Creio que agora que está ajustada a questão do contador você vai saber resolver o restante do exercício

Obs: Não recomendo fazer uso do comando fflush(stdin);. Para evitar o uso desse comando, estou fazendo uso de uma função para limpar a sujeira do buffer 

agora eu estou fazendo mas deu problema na hora de somar o abate

adicionado 2 minutos depois
#include <stdio.h>
#include <stdlib.h>

void saindo ();
void cadastro();
void leite_total();
void leiteabate();

struct vacas {
    int cod;
    float qtdalim;
    int ano_nas;
    float leite;
    char abate;
	int atual;
    int ano;
   
};

int i, j, cont = 0, pos, esc,abate=0; // contador inicia com o valor 0
float leitep = 0 ;

  
struct vacas vet[5];

void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}

int main() {

    system("color b");

    do {
        system("cls");
        system("color b");
        printf("\n -------------------------------------------------------------\n");
        printf("\n[1] - CADASTRO\n[2] - TOTAL DE LEITE PRODUZIDO POR SEMANA \n"
               "[3] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA\n"
               "[4] - TOTAL DE LEITE PRODUZIDO POR SEMANA POS ABATE\n"
               "[5] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA POS ABATE\n"
               "[6] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA \n[7] - SAIR");
        printf("\n ------------------------------------------------------------- \n ");
        printf("=> ");
        scanf("%d", &esc);
        limpa_linha();

        switch (esc) {

        case 1:
            cadastro();
            break;
        case 2:
            leite_total();
            break;
        case 3:
             leiteabate ();
            break;
        case 4:

            break;
        case 5:

            break;
        case 6:

            break;
        case 7:

            break;
        default:
            printf("Opcao invalida");
            break;
        }

    } while (esc != 7); //para sair do laço e nescessario que seja diferente das opções existentes

    return 0;
}

void cadastro() {

    char opcao;

    do {
        system("color b");
        system("cls");
        system("color b");
        system("cls");
        printf("\n ---------------------------------------------------------------------------------\n ");
        printf("\n Entre com codigo do Gado: ");
        scanf("%i", &vet[cont].cod);
        limpa_linha();

        printf("\n Entre Com Ano De nascimento do Gado: ");
        scanf("%i", &vet[cont].ano_nas);
        limpa_linha();

        printf("\n Entre Com a Quantidade de Alimento: ");
        scanf("%f", &vet[cont].qtdalim);
        limpa_linha();

        printf("\n Entre com A quantidade De leite produzida Semanalmente: ");
        scanf("%f", &vet[cont].leite);
        limpa_linha();

        printf("\n Deseja Continuar? [s/n]: ");
        scanf("%c", &opcao);
        limpa_linha();

        printf("\n ---------------------------------------------------------------------------------\n ");

        vet[cont].ano = 2018;
        vet[cont].atual = vet[cont].ano - vet[cont].ano_nas;// traz a idade de cada boi

        printf("Idade: %d\n", vet[cont].atual);

        system("pause");

        cont++; // contador é incrementado em 1

    } while (opcao != 'n');
}


void leite_total()
{
    float total_leite = 0;
    for (i = 0; i < cont; i++) {
        total_leite += vet[i].leite;
    }
    printf(" total de leite produzido de todas as vacas e  : %.2f \n", total_leite);
    system("pause");
    main();
}

void qtdabate()
{
   

 
   for(i=0;i<cont ;i++)
   {
       if(vet[cont].atual >5  )//aqui ele verifica com mais de 5 anos flega com s e acrescenta 1 na abate que e int 
       {
        vet[cont].abate == 'S';
           abate++;
       }
   }
} 
void leiteabate()
{
   

   for(i=0;i<cont;i++)
   {
       if(vet[cont].abate == 'S')//verifica qual e a com s e soma  mas ta dando errado
       { 
       for(i=0;i<abate;i++)leitep+= vet[cont].leite;
       }
   }
   printf("%f",leitep); 
   system("pause");
}
/*void alimabate() //ainda vou construir aqui
{
   int i;
   float alim_abate;
   alim_abate = 0;
   for(i=0;i<4;i++)
   {
       if(vetgado[i].abate == 'N')
       {
           alim_abate+=vetgado[i].alim;
       }
   }
   printf("%f\n",alim_abate);
}
void alimenporsemana()
{
   float kilosporsemana;
   kilosporsemana=0;
   int i;
   for(i=0;i<4;i++)
   {
       kilosporsemana+=vetgado[i].alim;
   }
   printf("%f\n",kilosporsemana);
}}

void saindo () {
    printf("\n ------------------------------------------------------------- \n ");
}*/

 

Link para o comentário
Compartilhar em outros sites

ABC DOS PENTEST    você está usando o cont  no vetor e deveria ser  ,  então seu código pode ser assim  :

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome das cores */
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int letra, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letra;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letra + (__BACKGROUND << 4));
}
                  /* y = linha de 0 a 24 , x = coluna de 0 a 80 */
void gotoxy(int x, int y){/*imprimir na linha e coluna desejada */
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int som(int f){
    Beep(f,150);/* primeiro a frquência depois o tempo de duração do som */
    return 0;
}
void saindo ();
void cadastro();
void leite_total();
void leite_abate();
void qtd_abate();

struct    vacas{
    int   cod;
    float qtdalim;
    int   ano_nas;
    float leite;
    char  abate;
	int   atual;
    int   ano;
};
int i, j, cont, pos, esc,abate; /* contador inicia com o valor 0*/
float leitep;
struct vacas vet[5];
void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}
int main(){
    system("color b");
    som(500);
    do {
        system("cls");
        system("color b");
        textcolor(10,0);
        for(j=5;j<73;j++){
            gotoxy(j, 4);printf("%c",205);
            gotoxy(j,15);printf("%c",205);
            gotoxy(j,17);printf("%c",205);
            if(j<17){
                gotoxy(5 ,j);printf("%c",186);
                gotoxy(73,j);printf("%c",186);
            }
        }
        gotoxy( 5, 4);printf("%c",201);
        gotoxy(73, 4);printf("%c",187);
        gotoxy( 5,17);printf("%c",200);
        gotoxy(73,17);printf("%c",188);
        gotoxy( 5,15);printf("%c",204);
        gotoxy(73,15);printf("%c",185);
        
        textcolor(11,0);
        gotoxy(9, 7);printf("[1] - CADASTRO");
        gotoxy(9, 8);printf("[2] - TOTAL DE LEITE PRODUZIDO POR SEMANA");
        gotoxy(9, 9);printf("[3] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA");
        gotoxy(9,10);printf("[4] - TOTAL DE LEITE PRODUZIDO POR SEMANA POS ABATE");
        gotoxy(9,11);printf("[5] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA POS ABATE");
        gotoxy(9,12);printf("[6] - QUANTIDADE DE ALIMENTO CONSUMIDO PRO SEMANA");
        gotoxy(9,13);printf("[7] - SAIR");
        textcolor(14,0);
        for(j=1;j<8;j++){
            gotoxy(10,j+6);printf("%c",j+48);
        }
        
        gotoxy(9,16);printf("Opcao => ");
        textcolor(11,0);
        scanf("%d", &esc);
        limpa_linha();
        gotoxy(0,18);
        switch (esc) {
        case 1:
            cadastro();
            break;
        case 2:
            leite_total();
            break;
        case 3:
             leite_abate ();
            break;
        case 4:

            break;
        case 5:

            break;
        case 6:

            break;
        case 7:
            printf("Saindo . . . !");
            som(1500);
            som(800);
            break;
        default:
            printf("Opcao invalida");
            break;
        }
    } while (esc != 7); /*para sair do laço e nescessario que seja diferente das opções existentes*/
    textcolor(7,0);
    printf("\n\n");
    return 0;
}
void cadastro(){
    textcolor(12,15);
    char opcao;
    do {
        system("cls");
        printf("-----------------------------------------------------------------\n");
        printf("Entre com codigo do Gado -------------: ");
        scanf("%i", &vet[cont].cod);
        limpa_linha();

        printf("Entre Com Ano De nascimento do Gado --: ");
        scanf("%i", &vet[cont].ano_nas);
        limpa_linha();

        printf("Entre Com a Quantidade de Alimento ---: ");
        scanf("%f", &vet[cont].qtdalim);
        limpa_linha();

        printf("Entre com A quantidade De leite produzida Semanalmente: ");
        scanf("%f", &vet[cont].leite);
        limpa_linha();

        printf("Deseja Continuar? [s/n] --------------: ");
        scanf("%c", &opcao);
        limpa_linha();

        printf("----------------------------------------------------------------\n");

        vet[cont].ano = 2018;
        vet[cont].atual = vet[cont].ano - vet[cont].ano_nas;/* traz a idade de cada boi*/
        printf("Idade Do Gado ------------------------: %d\n", vet[cont].atual);
        system("pause");
        cont++; /* contador é incrementado em 1*/
    } while (opcao != 'n');
    qtd_abate();
}
void leite_total(){
    float total_leite = 0;
    for (i = 0; i < cont; i++) {
        total_leite += vet[i].leite;
    }
    printf("Total De Leite Produzido De Todas As Vacas eh  : %.2f Litros De Leite\n", total_leite);
    system("pause");
    /*main();*/
}
void qtd_abate(){
   for(i=0;i<cont ;i++){
       if(vet[i].atual >5){/*aqui ele verifica com mais de 5 anos flega com s e acrescenta 1 na abate que e int*/
           vet[i].abate = 'S';/*marcada para abate */
           abate++;
       }
   }
}
void leite_abate(){
    leitep=0;
    for(i=0;i<cont;i++){
        if(vet[i].abate != 'S'){/*verifica qual e a com s e soma  mas ta dando errado*/
            leitep+= vet[i].leite;
        }
    }
   printf("Total De Leite Depois Do Abate -> %.2f Litros\n",leitep);
   system("pause");
}
/*void alimabate() //ainda vou construir aqui
{
   int i;
   float alim_abate;
   alim_abate = 0;
   for(i=0;i<4;i++)
   {
       if(vetgado[i].abate == 'N')
       {
           alim_abate+=vetgado[i].alim;
       }
   }
   printf("%f\n",alim_abate);
}
void alimenporsemana()
{
   float kilosporsemana;
   kilosporsemana=0;
   int i;
   for(i=0;i<4;i++)
   {
       kilosporsemana+=vetgado[i].alim;
   }
   printf("%f\n",kilosporsemana);
}}

void saindo () {
    printf("\n ------------------------------------------------------------- \n ");
}*/

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...