Jump to content
orocha

Funcao para sair do programa

Recommended Posts

orocha

Boas.Prentendo desenvolver uma funcao que pergunte ao utilizador se este tem a certeza que pretende abandonar o programa.

int calcula(int num);
void encerra(char opcao);

void main(void{

int num;
char opcao;

int cacula(num);
void encerra(opcao);

}

void encerra(char opcao){

            printf("Tem a certeza que pretende encerrar o programa (S)/(N) ?");
            scanf("%c",&opcao);
            if(opcao=='S' && opcao=='s');
                   exit();

           else{
                   if(opcao=='n' && opcao=='N');
                   calcula(num);
          else
                    printf("Opcao invalida\n);}

}

E assim?

Cumps

Share this post


Link to post
Share on other sites
bubulindo

a funcão é :

exit()

Mas não te vai adiantar de muito com o código que postaste aqui.


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
Localhost

orocha: antes de tentares utilizar a função que o bubulindo referiu acho que era melhor reveres bem esse código porque nem sequer compila e está um bocado estranho.


here since 2009

Share this post


Link to post
Share on other sites
orocha

Sim existe um problema qualquer com a minha estrutura de ifs.A minha ideia era fazer um if  e depois dar a instruçao para sair  e depois dentro do else desse if colocar outro if/else,mas pareçe que tou a fazer algo mal.

Share this post


Link to post
Share on other sites
bubulindo

Estás... e não são os ifs... :\

Experimenta tirar o ";" logo após o if e troca && por ||. Não vai compilar, mas pelo menos corrige os erros que tens nos ifs. Já o resto...


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
falk0n

int calcula(int num);
void encerra(char opcao);

void main(void){ // faltava-te um ')' após void ... tens de ter em atenção estas coisas 

int num;
char opcao;

calcula(num); // nesta situação deves chamar a função calcula escrevendo apenas calcula(num);  pq para alem de teres um int tinhas a palavra mal escrita ... 
encerra(opcao); // bem como aqui tens de tirar tb o void e escrever apenas encerra(opcao); 

}

Para alem dos comentarios que te fiz ali no codigo deves ter em atenção o que o babulindo te disse pois a logica que tens está errada.

Um número ou caracter ou é uma coisa ou é outra se for duas coisas é pq é o mesmo.

o que estas a indicar é que

if(opcao=='S' && opcao=='s');
                   exit();

para efectuares a função exit() tens no código que opcao tem de ser ao mesmo tempo 'S' e 's' o que não é possível por isso ele salta para o else.

if(opcao=='S' || opcao=='s');
                   exit();

Desta forma o que estas a indicar é que para efectuares a função exit() a tua opcao é 'S' OU 's' .

Todas estas indicações que te fiz foi sem compilar. Se já tiveres a função calcula escrita em principio já deverás começar a ver qq coisa a funcionar ...

Tal como o babulindo te indicou deves retirar o ponto e virgula daquele if

void encerra(char opcao){

            printf("Tem a certeza que pretende encerrar o programa (S)/(N) ?");
            scanf("%c",&opcao);
            if(opcao=='S' && opcao=='s') // ; este ponto e virgula desaparece pois o if não necessita de ponto e virgula
                   exit();

           else{
                   if(opcao=='n' && opcao=='N');
                   calcula(num);
          else
                    printf("Opcao invalida\n);}

}

Boas programações

Share this post


Link to post
Share on other sites
orocha

Boas.Obrigado pelos reparos , realmente tinha ai uma serie de erros de logica.Já tenho a funcao calcula definida e quando fui tentar compilar o unico erro e "to few arguments to function exit();" ,o que significa acho eu que a funcao exit tem de receber um argumento qualquer,nao e?

Share this post


Link to post
Share on other sites
KTachyon
exit(EXIT_SUCCESS);


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
orocha

Boas.Tentei passar esse argumento (EXIT_SUCCESS); mas o compilador deu outro erro de "undeclared (first use in this function)".

É necessário declarar esse argumento antes de o tentar passar ou é algo que ja esta nas bibliotecas,ou é a condiçao de sucesso para sair do programa(este ultimo nao deve ser dado que para isso e que la estao os ifs)

Share this post


Link to post
Share on other sites
orocha

Ok,obrigado,mas ta dificil de o gajo compilar.Agora da-me "undefined reference to WinMain@16".Isto significa o que?Estou a fazer isto no codebocks tenho a main e varios ficheiro no mesmo projecto e esta funçao esta num ficheiro e depois é chamada pela main em certas condições(para terminar um programa).

Share this post


Link to post
Share on other sites
bubulindo

Se colocares o código a que o erro se refere na sua totalidade e explicares a estrutura que tens do teu projecto, talvez te consigamos ajudar...


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites
falk0n

isso acho que se deve ao tipo de projecto que definiste no codeblocks ...

Coloca a definição de projecto para consola

Boas programações

Share this post


Link to post
Share on other sites
orocha

Se colocares o código a que o erro se refere na sua totalidade e explicares a estrutura que tens do teu projecto, talvez te consigamos ajudar...

O codigo a que o erro se refere é este que esta ai no topico(depois de corrigido claro),e basicamente tenho a main e varios ficheiros no mesmo projecto (estou no codeblocks) e esta funçao que esta a dar este erro esta declarada no ficheiro da main e definida noutro á parte.Depois em certas condições pode ser chamada ao executar a main...

Share this post


Link to post
Share on other sites
orocha

isso acho que se deve ao tipo de projecto que definiste no codeblocks ...

Coloca a definição de projecto para consola

Boas programações

Boas.Obrigado ja compilou mas agora descobri que nao faz aquilo que quero.Basicamente tenho um menu do genero

do{......
...............case'f':
              
               case'F':fim(opcao);
default:printf("opcao invalida\n");}while(opcao!='F'||opcao!='f').

Acho que ja percebi.O problema e que eu programei isto para o programa acabar quando o utilizador mete o caracter f,mas o que eu queria era que quando o utilzador metesse esse caracter fosse chamada esta funçao que estive a definir que lhe perguntava se ele queria sair ou nao

O prorama agora quando pressiono o f acaba e diz opcao invalida.

..Talvez pudesse resolver isto fazendo mais um printf e um scanf e depois definindo a condição ciclo para acabar quando  o utilizador metesse sim (caracter s), mas o problema e que tenho mesmo de definir esta funcao a parte.

Share this post


Link to post
Share on other sites
orocha

O problema é que não estas a passar o parametro opcao por referencia mas sim por cópia. Se ainda não sabes o que são estes conceitos deverias procurar um pouco sobre passagem de parâmetros por referência.

Mas de forma rápida para ajudar será retornares a opção da função fim e guardares o seu valor na variável opcao.

Boas programações

Boas.Obrigado pela ajuda.Mas supondo que eu so posso usar passagem de parametros por copia.Existe alguma maneira de contornar isto?

Share this post


Link to post
Share on other sites
falk0n

Coloca o código dessa função onde tens esse do { } while para poder ajudar um pouco mais.

Boas programações

ps. Apaguei o post anterior pois percebi que o problema pode ser outro.

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

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