1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Duvida - C++

Discussão em 'Programação' iniciada por RPortela, 21 de Novembro de 2006. (Respostas: 25; Visualizações: 2453)

  1. RPortela

    RPortela Power Member

    boas,

    estou agora a dar c++ em bases de programação (12º ano) em modo "Win32 console aplication" ou seja, é uma aplicação de consola e queria saber o que preciso de fazer para que a "janela" se feche automaticamente, ou seja, encerrar o programa.

    eu tenho a opção de encerrar o programa que quando é escolhida chama a função sair(); definida previamente.

    usando a mesma logica do system("cls") para limpar o ecrã, exprimentei usar o seguinte codigo:

    Código:
    void sair() {
           system("exit");
     }
    contudo este codigo nao funciona, alguem me sabe ajudar?
    sff

    cumprimentos
     
  2. HecKel

    HecKel The WORM

    Basta a função main terminar.

    Suponho que seja algum programa daqueles com menu em que vais escolhendo as opções e executando diversas funções..., e isso deve estar dentro de um ciclo, certo?

    Então quando verificares a escolha da função sair simplesmente sais do ciclo e deixas o main terminar, ou então return no local que valida a tecla escolhida (este return terá de ser dentro do main).

    Se isto não ajudar, coloca aqui o código, sff.

    abraços, HecKel
     
  3. RPortela

    RPortela Power Member

    boas

    o codigo que tenho neste momento é o seguinte:

    Código:
    #include "stdafx.h"
    #include "iostream"
    
    using namespace std;
    
    void fechar() {
    system("exit") [COLOR=Red]=> Aqui está o erro[/COLOR]
    }
    
    void menu_perimetro() {
        \\codigo do menu perimetro }
    
    void menu_area() { 
        \\codigo do menu area }
    
    void menu_volume() { 
       \\codigo do menu volume }
    
    void menu_principal() {
        int op;
        cout << "-------------------------------------------" << endl;
        cout << "---- Escolha uma das seguintes opcoes: ----" << endl;
        cout << "---- 1-Calcular area                            ----" << endl;
        cout << "---- 2-Calcular Perimetro                     ----" << endl;
        cout << "---- 3-Calcular Volume                        ----" << endl;
        cout << "-------------------------------------------" << endl;
        cin >> op;
        if (op == 1) { menu_area(); }
        else if (op == 2) { menu_perimetro(); }
        else if (op == 3) { menu_volume();}
        else if (op == 4) { fechar();}
        else { cout << "Inseriu uma opcao errada!" << endl; }
        return = 4;
    }
    
    
    
    int main()
    {
        menu_principal();
    }
    

    ainda vai ser adicionado muito codigo ate estar concluido, isto é para um trabalho escolar, nao quero que me façam o programa apenas que "deiam" uma pequena ajuda.

    eu vou tentar explicar um pouco melhor, o que eu quero é que quando seja premida a tecla 4 (da opção 4) o programa seja encerrado automaticamente, sem qualquer pedido de confirmação nem nada do género, apenas que encerre.

    cumprimentos
     
  4. HecKel

    HecKel The WORM

    Alterei-te o programa ligeiramente, meti a cian os comentários que adicionei (para saberes como estava) e adicionei aquela linha a verde.

    Basicamente o que acontece é que ao escolheres a opção 4 entras no if, como já entrava, e depois retorna, sai daquela função dando-a como concluida.

    Como deves saber quando uma função termina o "cursor" do programa volta para o local onde a chamou, naquele caso a linha do main onde chamas a função e continua o programa sequêncialmente. Só que no teu caso não tens mais nada a seguir ao menu_principal(); logo a função main também termina.

    Tal como te tinha dito antes, em C/C++ para um programa terminar basta que a função main termine :)

    Julgo que não dei nenhuma calinada, no entanto o teu programa está a precisar de um ciclo senão só consegues executar uma função, sempre que quiseres fazer mais alguma operação terás de voltar a abrir o programa :)

    Espero que tenha ajudado ;)

    abraços, HecKel
     
  5. MadOnion

    MadOnion Folding Member

    Experimenta, System.exit(0); Deve funcionar em C++. Porque o metodo é do JAVA.
    Ou então, exit(0) com a biblioteca importada-> stdlib.h

    Não é bom terminar programas de forma abrupta com exit. É melhor mesmo com fim de ciclo, ou metodos/funções terminadas, no caso o main().

    Cumps

    PS: Heckel, não te falta em -> else if (op == 4) { return 0; } ?
    C++ pouco ou nada sei.
     
    Última edição: 21 de Novembro de 2006
  6. Rui_Carlos

    Rui_Carlos 1st Folding then Sex

    por que razão a função 'menu_principal' é do tipo 'void' e está a fazer um 'return 4'?

    e já agora podias meter um 'return 0' no fim da 'main'.
     
  7. RPortela

    RPortela Power Member

    boas,

    ja testei todas essas soluções e nenhuma me resolveu o problema :'(

    pareçe que vou ter de esqueçer isso.

    já agora, tenho o visual c++ 2005 express edition e quando compilo o meu programa ele dá.me os seguintes erros:

    como poderei corrigir isto?

    e tambem como poderei "pausar" o programa? ou seja, o programa e executado, mostra um valor no ecrã e nao fechar logo essa janela;
    neste momento ele mostra o output do programa na janela e fecha-a automaticamente, e não é isso que quero, quero que tenha o habitual texto "Press any key to continue".

    obrigado a todos pela vossa ajuda.

    cumprimentos
     
  8. Homem Bomba

    Homem Bomba Power Member

    A função main() é sempre do tipo int. No fim metes "return x;" para o programa terminar. X é um inteiro qualquer. 0 é usado para denotar que o programa terminou com sucesso e qualquer outro valor denota erro. Alguns compiladores dão warnings quando o programa termina com um valor diferente de 0.

    Para pausar o programa durante a sua execução usa a função usleep(int milliseconds). Atenção que isso pára mesmo o programa.

    Em alternativa, se queres forçar o utilizador a pressionar uma tecla para o programa continuar, usa a função kbhit:

    http://www.cprogramming.com/fod/kbhit.html

    Para matar o programa à força (normalmente nunca se usa), podes recorrer à chamada exit():

    http://www.cplusplus.com/ref/cstdlib/exit.html

    podes usar também o _exit(), mas este é muito mau porque mata LOGO tudo, sem guardar quaisquer informações que ainda não tenham sido escritas. Por exemplo, info que esteja no buffer do disco rígido sem ter sido escrita ainda é perdida.
     
    Última edição: 25 de Novembro de 2006
  9. PaNcRoNi

    PaNcRoNi What is folding?

    Boas porrtela,

    eu não sei se alguém deu este exemplo mas normalmente quando quero terminar os programas eu utilizo a seguinte experção:

    - exit(1);
    - exit(2);
    - exit(3);

    Experimenta um deles, penso que assim consegues. .
     
  10. Sa[n]dman

    Sa[n]dman Power Member

    Não sei se é casual ou não mas esqueceste-te de por o ';' depois de 'system ("exit")', exatamente aqui:

    Código:
    void fechar() {
    system("exit") [COLOR=Red][B];[/B][/COLOR]=> Aqui está o erro
    }
     
  11. MadOnion

    MadOnion Folding Member

    Sim falta o ;
    Mas como eu já tinha dito e o PaNcRoNi também o disse, pra terminar o programa de forma abrupta é apenas exit(inteiro); em que o parametro é um valor sentinela, por norma uso 0. Anyway, a melhor maneira de terminar é mesmo usando a metodologia do heckel.
     
  12. daminufe_tig

    daminufe_tig Power Member

    para mim eu fazia o seguinte:


    [...]
    int menu_principal() {
    int op;
    cout << "-------------------------------------------" << endl;
    cout << "---- Escolha uma das seguintes opcoes: ----" << endl;
    cout << "---- 1-Calcular area ----" << endl;
    cout << "---- 2-Calcular Perimetro ----" << endl;
    cout << "---- 3-Calcular Volume ----" << endl;
    cout << "-------------------------------------------" << endl;
    cin >> op;
    return op; // A função retorna o numero introduzido


    void main()
    {
    int num;
    num=menu_principal(); // num fica com a opção escolhida
    if (num==4)
    {
    return 0;
    }
    [...]
    }


    Experimenta assim...
     
  13. HecKel

    HecKel The WORM

    Não tem muita lógica uma função escrever para o monitor. Uma função tem como objectivo tratar algo e retornar um resultado, aí apenas escreves para o monitor e retornas o valor inserido..., e curiosamente é a função main que vai tratar esse valor?

    O que sugeriste funciona, mas teria MUITO mais lógica fazer o inverso, o main criar o menu (dentro de um ciclo, dá jeito para o programa possibilitar a execução das outras funções) e consoante o valor recebido tratar aí cada função.

    abraços, HecKel
     
  14. mj2p

    mj2p I'm Cool Cuz I Fold


    Concordo com o HecKel. Uma função em programação (para além da main()) deve ser interpretada como uma função matemática: em matemática passamos um determinado valor para a expressão analítica (domínio da função) e a própria função via indicar como varia esse valor (chama-se a essa variação contra-domínio de uma função). Assim, em C++ deves tentar que uma função seja usada como uma sub-rotina do programa para tratar um valor específico de uma forma específica. Portanto, tudo o que seja impressão no monitor (salvo raras excepções) deves deixar para a main().

    Já agora, porque é que se considera a função main() exclusicamente do tipo int? A maior dos livros e tutoriais que li consideram-na sempre como void.

    Vá, cumps;)
     
  15. HecKel

    HecKel The WORM

    Que grande desenterro...

    Quanto à tua questão, sinceramente não sei justificar com exactidão, mas tenho ideia que sendo a função main a principal do programa e que terminando esta o programa termina, julgo que tem sentido retornar um valor para o Sistema saber que a função terminou correctamente. No entanto isto é a minha interpretação, pode estar bem longe da verdade.

    O que é certo, é que o facto de main() ser int é uma noção definida nos standards de C.
     
  16. Confirmo que é essa a justificação.
     
  17. eu tb tenho aki um pekeno problema o k tenho de fazer é isto
    xxxxx
    x x
    x x
    x x
    xxxxx
    ( isto n ta a dar mas a intençao e k a culona da direta fika alinhada com o ultimo x de cim e baixo. e isso k eu n consigo fazer)
    dado um numero de 1 a 9 deve fazer isto. eu ja fiz td. mas so consigo por um espaço no meio. kome e k faço para ajustar o espaço.


    aki ta o k fiz

    #include <iostream>
    using namespace std;
    char x;
    int i;
    int n;
    int main()
    {

    cout << "\nDe-me um numero inteiro entre 1 e 9:"<< endl;
    cin >> n;
    while(n<1){
    cout << "\nDe-me um numero inteiro entre 1 e 9:"<< endl;
    cin >> n;}
    while(n>9){
    cout << "\nDe-me um numero inteiro entre 1 e 9:"<< endl;
    cin >> n;}
    for(i=0;i<n;i++){
    cout << "x";
    }
    for(i=1;i<=n-2;i++){
    cout << "\nx" << " " << "x";
    }
    cout << endl;
    for(i=1;i<=n;i++){
    cout << "x";
    }

    system("pause");
    return(0);
    }
     
    Última edição: 3 de Novembro de 2007
  18. Baderous

    Baderous Banido

    Só uma sugestão: quando copiares código feito por ti para colocares num post, coloca-o com o seguinte formato:


    [code]
    //código do programa
    [/code]


    Torna a leitura mais fácil. :)
     
    Última edição: 3 de Novembro de 2007
  19. AliFromCairo

    AliFromCairo Power Member

    Boas, coloca esse "\nx" antes do for a bold e o "x\n" depois, e deves obter o resultado pretendido. Já agora, podes juntar os ciclos todos que tens para processar o input num só ciclo do while por exemplo.
     
  20. Make.Love

    Make.Love Banido

    este

    Código:
    system("pause");
    fica muita feio... :005:

    substitui por ;)

     

Partilhar esta Página