Ir ao conteúdo

C nao consigo resolver dois problemas no codigo


Posts recomendados

Postado
#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

Postado

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
Postado

e que no caso do for nao preciso dizer para ele onde começar pois ele esta comparando o que esta no contador 

ele faz assim para ;i enquanto for menor do que o cont acrescente 1

adicionado 0 minutos depois

@Xeviousbr mesmo com for i=0 ou i=1 da erro 

Postado

@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 

Postado
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 ");
}*/

 

Postado

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 ");
}*/

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!