Ir ao conteúdo
  • Cadastre-se

Return n Funciona Mas Exit sim


Sioto

Posts recomendados

Fala galera, tenho essa função mas nao acho que compensa explicar toda ela, o negocio é que no meu Segundo IF ali, onde eu tenho exit(0), eu nao queria sair do programa, mas só sair dessa função, porém se eu coloco return 0 nao funciona, alguem faz ideia do porque?


int Production(data * Queue1, data* Queue2, delay * RGB_Delay_Stack1, delay *RGB_Delay_Stack2,int i,int endofQ1,int endofQ2){

gotoxy(30,45+i);
printf("%i\n\n",i);
data *AuxQ1_Next = Queue1, *AuxQ2_Next = Queue2;
data *AuxQ1_Actual = Queue1, *AuxQ2_Actual = Queue2;
delay *AuxD1 = RGB_Delay_Stack1, *AuxD2 = RGB_Delay_Stack2;
setcolor(brancoclaro);
if(i == 15)
i = 1;
if(Queue1->next->next == NULL && Queue2->next->next == NULL){
gotoxy(30,45+i);
printf("Oi\n");
AuxQ1_Actual = Queue1->next;
AuxQ2_Actual = Queue2->next;
getchar();
message(AuxQ1_Actual,AuxQ2_Actual,AuxQ1_Next,AuxQ2_Next,i++,1);
gotoxy(30,45+i++);
printf("Apertar Enter vai Sair do Programa");
getchar();
exit(0);
}
if(Queue1->next->next == NULL && endofQ1 == 0){
Production(Queue1,Queue2,RGB_Delay_Stack1,RGB_Delay_Stack2,i++,1,endofQ2);
}
if(Queue2->next->next == NULL && endofQ2 == 0){
Production(Queue1,Queue2,RGB_Delay_Stack1,RGB_Delay_Stack2,i++,endofQ1,1);
}
if(endofQ1 == 0)
while(AuxQ1_Actual->next != NULL){
AuxQ1_Next = AuxQ1_Next->next;
AuxQ1_Actual = AuxQ1_Next->next;
}
if(endofQ2 == 0)
while(AuxQ2_Actual->next != NULL){
AuxQ2_Next = AuxQ2_Next->next;
AuxQ2_Actual = AuxQ2_Next->next;
}

message(AuxQ1_Actual,AuxQ2_Actual,AuxQ1_Next,AuxQ2_Next,i++,0);
if(endofQ1 == 0){
Pop(AuxD1);
RemoveFromEndOfQueue(Queue1);
}
if(endofQ2 == 0){
RemoveFromEndOfQueue(Queue2);
Pop(AuxD2);
}
Production(Queue1,Queue2,RGB_Delay_Stack1,RGB_Delay_Stack2,i++,endofQ1,endofQ2);

}

Link para o comentário
Compartilhar em outros sites

Olá. Então, algumas cosiderações. Primeiro: tente colocar alguns prints dentro do if para ter certeza que está entrando nele, ou debugue. Segundo: evite usar o getchar() pois é uma função insegura apesar de ser ANSI, pois ele armazena um buffer até q seja pressionada a tecla enter. Por exemplo teste colocar um getchar apos o outro e verá que o segundo não vai esperar você pressionar alguma tecla, pois o segundo pegaŕa o enter que ficou no buffer do primeiro.Então sugiro que, apesar que isto não influencia um return, tire o getchar e faça um teste. Existem alternativas para getchar(), mas você precisa saber qual o compilador está usando, então, por exemplo, pode usar o getch() ou getche() para ler um caracter do teclado (estão na CONIO.H).

Link para o comentário
Compartilhar em outros sites

Olá. Então, algumas cosiderações. Primeiro: tente colocar alguns prints dentro do if para ter certeza que está entrando nele, ou debugue. Segundo: evite usar o getchar() pois é uma função insegura apesar de ser ANSI, pois ele armazena um buffer até q seja pressionada a tecla enter. Por exemplo teste colocar um getchar apos o outro e verá que o segundo não vai esperar você pressionar alguma tecla, pois o segundo pegaŕa o enter que ficou no buffer do primeiro.Então sugiro que, apesar que isto não influencia um return, tire o getchar e faça um teste. Existem alternativas para getchar(), mas você precisa saber qual o compilador está usando, então, por exemplo, pode usar o getch() ou getche() para ler um caracter do teclado (estão na CONIO.H).

Fala Clodoaldo,

Os getchar estão ali só pra eu fazer testes mesmo, o printf OI e o printf Apertar Enter vai Sair, é só pra teste também...

Depois eu vou retirar eles.

Eu tenho certeza que estou entrando no if, porque como eu disse, se eu mudar o return 0 para exit 0 o programa faz o que eu quero, mas em vez de sair da função sai do programa né.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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