Jump to content
Sign in to follow this  
BioHzrd

problemas com transições de variaveis entre funções(urgente)

Recommended Posts

BioHzrd

o código é o seguinte:

#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define maxano 2015
#define maxcli 500
typedef struct da		
{
   int mes;
   int dia;
   int ano;
}data;
typedef struct ad_rev 
   {
data data;
int hora;
int nemp; 
int preco;
int used;
   }ad_revisao[maxcli];

enum boolean {
    true = 1, false = 0
    };
    
typedef  enum boolean  bool;

int revisao(ad_revisao ad_rev, int tot);
void consultas(ad_revisao ad_rev, int tot);
void menu(char vmes[20], int op, int tot);
void selmes (char vmes[20]);


int main (){
int  op=0,tot;
char vmes[20];

selmes(vmes);
menu (vmes, op, tot);

}
int revisao(ad_revisao ad_rev, int tot)
{ 
int i,max,j;
int t1,t2,t3,t4;
bool empr,diamaior,horamaior,pos;
SYSTEMTIME t;
GetSystemTime(&t);
t1 = t.wDay;
t2 = t.wMonth;
t3 = t.wYear;
t4 = t.wHour;

   printf("Quantos registos deseja inserir(lim. 500): ");
   do{
 scanf("%d", &tot);
 if (tot<1 || tot>maxcli)
 printf("Valor invalido!!! Volte a inserir: ");
}while (tot<1 || tot>maxcli);

   for (i = 0; i <tot; i++){
           
do{    
    pos = true;
printf("\nMes da marcacao: ");	

do{
  scanf("%d", &ad_rev[i].data.mes);
  if (ad_rev[i].data.mes < t2 || ad_rev[i].data.mes < 1 || ad_rev[i].data.mes > 12)
  printf("Mes invalido!!! Volte a inserir: ");
    }while (ad_rev[i].data.mes < t2 || ad_rev[i].data.mes < 1 || ad_rev[i].data.mes > 12);

if (ad_rev[i].data.mes == 2)
    max = 28;
if (ad_rev[i].data.mes == 1 || ad_rev[i].data.mes == 3 || ad_rev[i].data.mes == 5 || ad_rev[i].data.mes == 7 || ad_rev[i].data.mes == 8 || ad_rev[i].data.mes == 10 || ad_rev[i].data.mes == 12)
	max = 31;
if (ad_rev[i].data.mes == 4 || ad_rev[i].data.mes == 6 || ad_rev[i].data.mes == 9 || ad_rev[i].data.mes == 11)
	max = 30;

if (ad_rev[i].data.mes == t2)
	diamaior=true;


printf("Dia da Marcacao: ");
do{

	if (diamaior!=true)
	scanf("%d", &ad_rev[i].data.dia);
	else do{ 
		    scanf("%d", &ad_rev[i].data.dia);
		    if (ad_rev[i].data.dia<t1)
                printf("Dia invalido!!! Volte a inserir: ");
		   }
		 while(ad_rev[i].data.dia<t1);

    if (ad_rev[i].data.dia<1 || ad_rev[i].data.dia>max)
    printf("Dia invalido!!! Volte a inserir: ");
}
while (ad_rev[i].data.dia<1 || ad_rev[i].data.dia>max);
    
printf("Ano da Marcacao: ");
do{
	scanf("%d", &ad_rev[i].data.ano);
	if (ad_rev[i].data.ano<t3 || ad_rev[i].data.ano>maxano)
        printf("Ano invalido!!! Volte a inserir: ");
   }	
while (ad_rev[i].data.ano<t3 || ad_rev[i].data.ano>maxano);

     if ((t4>=17) && (ad_rev[i].data.dia == t1) && (ad_rev[i].data.mes == t2) && (ad_rev[i].data.ano == t3))
    {pos = false;
    printf("\nNAO PODE REALIZAR ESSA MARCACAO!!! Ja estamos encerrados!!!\n");}
}while (pos == false);
    
    if (ad_rev[i].data.dia == t1 && ad_rev[i].data.mes == t2 && ad_rev[i].data.ano == t3)
	horamaior=true;

printf("Hora de marcacao (das 8h as 17h): ");
do{
	if (horamaior!=true)
		scanf("%d", &ad_rev[i].hora);
	else do{ 
               scanf("%d", &ad_rev[i].hora);
		   if (ad_rev[i].hora<t4)
               printf("Valor invalido!!! Volte a inserir: ");
               } while(ad_rev[i].hora<t4);
 if (ad_rev[i].hora<8 || ad_rev[i].hora>17)
     printf("Valor invalido!!! Volte a inserir: ");
}while(ad_rev[i].hora<8 || ad_rev[i].hora>17);

   
    printf("\nEmpregado Coco - 1");
printf("\nEmpregado Ranheta - 2");
printf("\nEmpregado Facada - 3");
printf("\nEmpregado Tose - 4");
printf("\nEmpregado Maria Antunieta - 5");
printf("\n\nNumero do Empregado: ");
empr=true;
do{
scanf("%d",&ad_rev[i].nemp);
     for (j=0;j<tot; j++){ 
 if((ad_rev[i].nemp == ad_rev[j+1].nemp) && (ad_rev[i].data.ano == ad_rev[j+1].data.ano) && 
         (ad_rev[i].data.mes == ad_rev[j+1].data.mes) && (ad_rev[i].data.dia == ad_rev[j+1].data.dia)
         && (ad_rev[i].hora == ad_rev[j+1].hora))
         {printf("O empregado nao esta disponivel!!!");
         empr=false;}
         }
         }while((ad_rev[i].nemp<1 || ad_rev[i].nemp>5) && (empr=false));

    	
    ad_rev[i].used = 1;
ad_rev[i].preco = 0;

    if (tot >= 2)
{  system("cls");
       printf("\nProximo registo \n");}
   
}  
   return tot;
}

void consultas(ad_revisao ad_rev, int tot)
{
 int i,cont=0,cont1=0,cont2=0;
 int empcont1=0,empcont2=0,empcont3=0,empcont4=0,empcont5=0;
 int t1,t2,t3,t4;
 SYSTEMTIME t;
 GetSystemTime(&t);
 t1 = t.wDay;
 t2 = t.wMonth;
 t3 = t.wYear;
 t4 = t.wHour;
 printf("%d",tot);

 for (i = 0; i < tot; i++){  
	 if(!(ad_rev[i].preco == 0)){ 
		cont1++;}  
            } 

 for (i = 0; i < tot; i++){  
	 if(tot == 0) 
		cont2 = 0;    
	 else if(ad_rev[i].data.ano>t3) 
		cont2++;    
	 else if(ad_rev[i].data.mes>t2) 
		cont2++;
	else if(ad_rev[i].data.dia>t1)
		cont2++;
	else if(ad_rev[i].hora>t4)
		cont2++;
	else if(ad_rev[i].preco==0)
		cont2++;
 } 

 for (i = 0; i < tot; i++){  	 
	if(ad_rev[i].nemp == 1) empcont1++;
	if(ad_rev[i].nemp == 2) empcont2++;
	if(ad_rev[i].nemp == 3) empcont3++;
	if(ad_rev[i].nemp == 4) empcont4++;
	if(ad_rev[i].nemp == 5) empcont5++;
 } 


printf("\nNumero de revisoes agendadas: %d", tot);
printf("\nNumero de revisoes realizadas: %d", cont1);
printf("\nNumero de revisoes por realizar: %d", cont2);
printf("\nRevisoes por empregado:");
printf("\n		Empregado 1: %d", empcont1);
printf("\n		Empregado 2: %d", empcont2);
printf("\n		Empregado 3: %d", empcont3);
printf("\n		Empregado 4: %d", empcont4);
printf("\n		Empregado 5: %d", empcont5);
printf("\n\nCarregue em qualquer tecla para voltar ao menu!!! \n");
getch();

}


void selmes (char vmes[20]){	

int t1;
SYSTEMTIME t;
GetSystemTime(&t);
t1 = t.wMonth;

switch (t1){
case 1:
	strcpy(vmes, "Janeiro");
break;
case 2:
	strcpy(vmes, "Fevereiro");
break;
case 3:
	strcpy(vmes, "Março");
break;
case 4:
	strcpy(vmes, "Abril");
break;
case 5:
	strcpy(vmes, "Maio");
break;
case 6:
	strcpy(vmes, "Junho");
break;
case 7:
	strcpy(vmes, "Julho");
break;
case 8:
	strcpy(vmes, "Agosto");
break;
case 9:
	strcpy(vmes, "Setembro");
break;
case 10:
	 strcpy(vmes, "Outubro");
break;
case 11:
	strcpy(vmes,"Novembro");
break;
case 12:
	strcpy(vmes, "Dezembro");
break;
default:
	strcpy(vmes, "Erro no Mês");
}
}

void menu (char vmes[20], int op, int tot)
{   
ad_revisao ad_rev;
printf("    Dia do Mês: %s\n", vmes); 
printf("\n");
printf("	******************************************\n");
printf("	* 1 - Agendar Revisão		  	 *\n");
printf("	* 2 - Consultar Revisões	  	 *\n");
printf("	* 3 - Registar Valor Pago Pela a Revisão *\n");
printf("	* 4 - Apresentar Informação do Mês  	 *\n");
printf("	* 5 - Estatística			 *\n");
printf("	* 6 - Fim				 *\n");
printf("	******************************************\n");
printf("Opcao: ");
    do {
    scanf ("%d", &op);
   }
while (op < 0 || op >7);

  switch (op) { 
    case 1:
        system("cls");  
	revisao(ad_rev, tot);
	system("cls");  
	menu (vmes, op, tot);	
case 2:
        system("cls");  
	consultas(ad_rev, tot);
	system("cls");  
	menu (vmes, op, tot);

         }
}


:wallbash: 😡 😡

estou com problemas em transitar o valor da variavel "tot" da função "revisao" para a função "consultas"....

já tentei muita coisa pra tentar passar os valores....

alguém pode dar um jeito.... Sff Brigada


CumpsBioHzrd

Share this post


Link to post
Share on other sites
Localhost

Chamas a função consultas passando como argumento a variável tot, não?


here since 2009

Share this post


Link to post
Share on other sites
onurbalmeida
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define maxano 2015
#define maxcli 500
typedef struct da                
{
   int mes;
   int dia;
   int ano;
}data;
typedef struct ad_rev 
   {
        data data;
        int hora;
        int nemp; 
        int preco;
        int used;
   }ad_revisao[maxcli];

enum boolean {
false,
true
    };
    
typedef  enum boolean  bool;

int revisao(ad_revisao ad_rev, int tot);
void consultas(ad_revisao ad_rev, int tot);
void menu(char vmes[20], int op, int tot);
void selmes (char vmes[20]);


int main (){
int  op=0,tot=0,x=0;
char vmes[20];

selmes(vmes);
menu (vmes, op, tot,x);

}
int revisao(ad_revisao ad_rev,int tot)
{ 
        int i,max,j;
        int t1,t2,t3,t4;
        bool empr,diamaior=0,horamaior=0,pos;
        SYSTEMTIME t;
        GetSystemTime(&t);
        t1 = t.wDay;
        t2 = t.wMonth;
        t3 = t.wYear;
        t4 = t.wHour;

        
   printf("Quantos registos deseja inserir(lim. 500): ");
   do{
         scanf("%d", &tot);
         if (tot<1 || tot>maxcli)
         printf("Valor invalido!!! Volte a inserir: ");
        }while (tot<1 || tot>maxcli);
        
   for (i = 0; i <tot; i++){
           
        do{    
    pos = true;
        printf("\nMes da marcacao: ");        
        
        do{
          scanf("%d", &ad_rev[i].data.mes);
          if (ad_rev[i].data.mes < t2 || ad_rev[i].data.mes < 1 || ad_rev[i].data.mes > 12)
          printf("Mes invalido!!! Volte a inserir: ");
    }while (ad_rev[i].data.mes < t2 || ad_rev[i].data.mes < 1 || ad_rev[i].data.mes > 12);

        if (ad_rev[i].data.mes == 2)
            max = 28;
        if (ad_rev[i].data.mes == 1 || ad_rev[i].data.mes == 3 || ad_rev[i].data.mes == 5 || ad_rev[i].data.mes == 7 || ad_rev[i].data.mes == 8 || ad_rev[i].data.mes == 10 || ad_rev[i].data.mes == 12)
                max = 31;
        if (ad_rev[i].data.mes == 4 || ad_rev[i].data.mes == 6 || ad_rev[i].data.mes == 9 || ad_rev[i].data.mes == 11)
                max = 30;

        if (ad_rev[i].data.mes == t2)
                diamaior=true;
        

        printf("Dia da Marcacao: ");
        do{
                
                if (diamaior!=true)
                scanf("%d", &ad_rev[i].data.dia);
                else do{ 
                            scanf("%d", &ad_rev[i].data.dia);
                            if (ad_rev[i].data.dia<t1)
                printf("Dia invalido!!! Volte a inserir: ");
                           }
                         while(ad_rev[i].data.dia<t1);
        
    if (ad_rev[i].data.dia<1 || ad_rev[i].data.dia>max)
    printf("Dia invalido!!! Volte a inserir: ");
        }
        while (ad_rev[i].data.dia<1 || ad_rev[i].data.dia>max);
    
        printf("Ano da Marcacao: ");
        do{
                scanf("%d", &ad_rev[i].data.ano);
                if (ad_rev[i].data.ano<t3 || ad_rev[i].data.ano>maxano)
        printf("Ano invalido!!! Volte a inserir: ");
           }        
        while (ad_rev[i].data.ano<t3 || ad_rev[i].data.ano>maxano);

     if ((t4>=17) && (ad_rev[i].data.dia == t1) && (ad_rev[i].data.mes == t2) && (ad_rev[i].data.ano == t3))
    {pos = false;
    printf("\nNAO PODE REALIZAR ESSA MARCACAO!!! Ja estamos encerrados!!!\n");}
        }while (pos == false);
    
    if (ad_rev[i].data.dia == t1 && ad_rev[i].data.mes == t2 && ad_rev[i].data.ano == t3)
                horamaior=true;

        printf("Hora de marcacao (das 8h as 17h): ");
        do{
                if (horamaior!=true)
                        scanf("%d", &ad_rev[i].hora);
                else do{ 
               scanf("%d", &ad_rev[i].hora);
                           if (ad_rev[i].hora<t4)
               printf("Valor invalido!!! Volte a inserir: ");
               } while(ad_rev[i].hora<t4);
         if (ad_rev[i].hora<8 || ad_rev[i].hora>17)
     printf("Valor invalido!!! Volte a inserir: ");
        }while(ad_rev[i].hora<8 || ad_rev[i].hora>17);

   
    printf("\nEmpregado Coco - 1");
        printf("\nEmpregado Ranheta - 2");
        printf("\nEmpregado Facada - 3");
        printf("\nEmpregado Tose - 4");
        printf("\nEmpregado Maria Antunieta - 5");
        printf("\n\nNumero do Empregado: ");
        empr=true;
        do{
        scanf("%d",&ad_rev[i].nemp);
             for (j=0;j<tot; j++){ 
         if((ad_rev[i].nemp == ad_rev[j+1].nemp) && (ad_rev[i].data.ano == ad_rev[j+1].data.ano) && 
         (ad_rev[i].data.mes == ad_rev[j+1].data.mes) && (ad_rev[i].data.dia == ad_rev[j+1].data.dia)
         && (ad_rev[i].hora == ad_rev[j+1].hora))
         {printf("O empregado nao esta disponivel!!!");
         empr=false;}
         }
         }while((ad_rev[i].nemp<1 || ad_rev[i].nemp>5) && (empr=false));
        
            
    ad_rev[i].used = 1;
        ad_rev[i].preco = 0;
        
    if (tot >= 2)
        {  system("cls");
       printf("\nProximo registo \n");}
   
}  


   return tot;
}

void consultas(ad_revisao ad_rev, int tot)
{
         int i,cont=0,cont1=0,cont2=0;
         int empcont1=0,empcont2=0,empcont3=0,empcont4=0,empcont5=0;
         int t1,t2,t3,t4;
         SYSTEMTIME t;
         GetSystemTime(&t);
         t1 = t.wDay;
         t2 = t.wMonth;
         t3 = t.wYear;
         t4 = t.wHour;
         

         for (i = 0; i < tot; i++){  
                 if(!(ad_rev[i].preco == 0)){ 
                        cont1++;}  
            } 




         for (i = 0; i < tot; i++){  
                 if(tot == 0) 
                        cont2 = 0;    
                 else if(ad_rev[i].data.ano>t3) 
                        cont2++;    
                 else if(ad_rev[i].data.mes>t2) 
                        cont2++;
                else if(ad_rev[i].data.dia>t1)
                        cont2++;
                else if(ad_rev[i].hora>t4)
                        cont2++;
                else if(ad_rev[i].preco==0)
                        cont2++;
         } 
        
         for (i = 0; i < tot; i++){           
                if(ad_rev[i].nemp == 1) empcont1++;
                if(ad_rev[i].nemp == 2) empcont2++;
                if(ad_rev[i].nemp == 3) empcont3++;
                if(ad_rev[i].nemp == 4) empcont4++;
                if(ad_rev[i].nemp == 5) empcont5++;
         } 
         
printf("\nNumero de revisoes agendadas: %d", tot);
printf("\nNumero de revisoes realizadas: %d", cont1);
printf("\nNumero de revisoes por realizar: %d", cont2);
printf("\nRevisoes por empregado:");
printf("\n                Empregado 1: %d", empcont1);
printf("\n                Empregado 2: %d", empcont2);
printf("\n                Empregado 3: %d", empcont3);
printf("\n                Empregado 4: %d", empcont4);
printf("\n                Empregado 5: %d", empcont5);
printf("\n\nCarregue em qualquer tecla para voltar ao menu!!! \n");
getch();

}


void selmes (char vmes[20]){        

        int t1;
        SYSTEMTIME t;
        GetSystemTime(&t);
        t1 = t.wMonth;
        
        switch (t1){
        case 1:
                strcpy(vmes, "Janeiro");
        break;
        case 2:
                strcpy(vmes, "Fevereiro");
        break;
        case 3:
                strcpy(vmes, "Março");
        break;
        case 4:
                strcpy(vmes, "Abril");
        break;
        case 5:
                strcpy(vmes, "Maio");
        break;
        case 6:
                strcpy(vmes, "Junho");
        break;
        case 7:
                strcpy(vmes, "Julho");
        break;
        case 8:
                strcpy(vmes, "Agosto");
        break;
        case 9:
                strcpy(vmes, "Setembro");
        break;
        case 10:
                 strcpy(vmes, "Outubro");
        break;
        case 11:
                strcpy(vmes,"Novembro");
        break;
        case 12:
                strcpy(vmes, "Dezembro");
        break;
        default:
                strcpy(vmes, "Erro no Mês");
        }
}

void menu (char vmes[20], int op, int tot,int x)
{   

        ad_revisao ad_rev;
        printf("    Dia do Mês: %s\n", vmes); 
        printf("\n");
        printf("        ******************************************\n");
        printf("        * 1 - Agendar Revisão                           *\n");
        printf("        * 2 - Consultar Revisões                   *\n");
        printf("        * 3 - Registar Valor Pago Pela a Revisão *\n");
        printf("        * 4 - Apresentar Informação do Mês           *\n");
        printf("        * 5 - Estatística                         *\n");
        printf("        * 6 - Fim                                 *\n");
        printf("        ******************************************\n");
        printf("Opcao: ");
    do {
            scanf ("%d", &op);
           }
        while (op < 0 || op >7);
        
  switch (op) { 
    case 1:
        system("cls");  
                x+=revisao(ad_rev, tot);
                system("cls");  
                menu (vmes, op, tot,x);        
        case 2:
        system("cls");  
                consultas(ad_rev, x);
                system("cls");  
                menu (vmes, op, tot,x);

         }
}

Share this post


Link to post
Share on other sites
bubulindo

eu tou em crer que isto

  switch (op) { 
    case 1:
        system("cls");  
                x=revisao(ad_rev, tot);
                system("cls");  
                menu (vmes, op, tot,x);        
        case 2:
        system("cls");  
                consultas(ad_rev, x);
                system("cls");  
                menu (vmes, op, tot,x);    <- não será tot aqui?

         }


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
onurbalmeida

eu tou em crer que isto

  switch (op) { 
    case 1:
        system("cls");  
                x=revisao(ad_rev, tot);
                system("cls");  
                menu (vmes, op, tot,x);        
        case 2:
        system("cls");  
                consultas(ad_rev, x);
                system("cls");  
                menu (vmes, op, tot,x);    <- não será tot aqui?

         }

Eu usei a variável X para receber o valor que a função retorna...

Uma outra maneira mais simples sem usar essa variável x seria passar a &tot e usar ponteiros, mas como não vi ponteiros, parti do principio que não poderia usar no projecto.

Share this post


Link to post
Share on other sites
BioHzrd

Obrigada a todos!!!!  ;)

ou seja "tot" da função "menu" não estava a receber o valor do "tot" da função "revisao" mas sim o valor de outra variável certo??


CumpsBioHzrd

Share this post


Link to post
Share on other sites
bubulindo

O problema é que criaste um switch  que escolhe um ou outro... logo se a variável for 1, ele corre a funcão revisão. Se for 2 ele corre a funcão consultas. Logo passar o valor da funcão revisão para a funcão consultas da maneira que criaste o switch é impossível.

Tás a ver a ideia?

Aproveita para consultar isto:

http://dilbert.com/strips/comic/2005-08-26/


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.