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

duvida em c

Discussão em 'Programação' iniciada por Fox_dc17, 20 de Abril de 2007. (Respostas: 20; Visualizações: 1242)

  1. Fox_dc17

    Fox_dc17 Power Member

    boas!
    tenho um projecto em maos onde tenho de fazer um menu principal onde cada opcao leva a um sub-menu e a ultima opcao sai do programa!

    a duvida reside no facto de nao saber como ao passar de um menu para um submenu limpo o ecra de modo a so se ver o sub-menu e como e que faço o programa se fexar se a opcao for selecionada!
    agradecia ajuda!
    óbrigada pela atencao!
     
  2. rubenm

    rubenm Suspenso

    para terminar por completo podes por um exit; do estilo break;
     
  3. Fox_dc17

    Fox_dc17 Power Member

    tip mas com break o programa nao corre!:s nao percebo o porque
    inda sou mt verde em programacao
     
  4. Flyer_rp

    Flyer_rp Power Member

    Para lipares o ecra podes usar esta função
    Código:
      #include windows.h 
      void clrscr(){
      COORD coordScreen = { 0, 0 }; 
      DWORD cCharsWritten; 
      CONSOLE_SCREEN_BUFFER_INFO csbi; 
      DWORD dwConSize; 
      HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 
         GetConsoleScreenBufferInfo(hConsole, &csbi); 
      dwConSize = csbi.dwSize.X * csbi.dwSize.Y; 
      FillConsoleOutputCharacter(hConsole, TEXT(' '),
                                 dwConSize, 
                                 coordScreen,
                                 &cCharsWritten); 
      GetConsoleScreenBufferInfo(hConsole, &csbi); 
      FillConsoleOutputAttribute(hConsole,
                                 csbi.wAttributes,
                                 dwConSize,
                                 coordScreen,
                                 &cCharsWritten); 
      SetConsoleCursorPosition(hConsole, coordScreen); 
    }
     
    Para os submenus podes utilizar o funçoes que os definem, depois só tens que ler a tecla que o utilizador pressiona e passa-la para um Switch Case que te chama a respectiva função.
     
    Última edição: 20 de Abril de 2007
  5. Fox_dc17

    Fox_dc17 Power Member

    thnks!vou tentar!fiz um que calculava se valia a pena investir num novo negocio ou nao e foi canja agora este com do while e tc e um quebra cabecas!!!!! :lol:
     
  6. heeven

    heeven Power Member

    podes sempre usar a biblioteca conio.h, é muito simples limpar. e acho que dá para usar para o que queres. cumps
     
  7. Fox_dc17

    Fox_dc17 Power Member

    eu uso cin e cout nao me ajeito com o printf e scanf! portanto a biblioteca ke uso e a iostream!
     
  8. HecKel

    HecKel The WORM

  9. Warrior

    Warrior Power Member

    << e >> são válidos em C, são operadores bit a bit. (completamente diferente do significado que têm no C++)
     
  10. MaxDamage

    MaxDamage Power Member

    Exacto, são operações de deslocamento de bits. Atenção que são dois sinais ">" ou "<", e não os "»" "«" :P
     
  11. VuDu

    VuDu Power Member

    system("clear") em linux ou system("cls") em windows... não esquecer o #include<stdlib.h>
     
  12. dark_splinter

    dark_splinter Power Member

    a maneira mais simples que tou a ver era algo do genero....

    while((variavel de opção) != (caracter que faz sair...))
    {
    menu...
    ler....
    system("cls");
    switch(submenu)
    {
    while(variavel de opção != (variavel de saida...))
    {

    }//para cada um dos sub... menus...
    }
    }

    Mas com funções e assim fazias algo melhor... disse está porque me parecia a mais simples de implementar apesar de repetires muito codigo....
     
    Última edição: 23 de Abril de 2007
  13. Fox_dc17

    Fox_dc17 Power Member

    thnks pela ajuda!o tranalho ja vai andando!a cena dos submenus e ke me lixa todo :S
    e mt ccodigo para mim visto que apenas tenho 3 meses de c! vamos la ver como e k isto corre

    obrigado pla ajuda
     
  14. jahred

    jahred Power Member

    system("CLS") nunca é aconselhado de usar, para limpar o ecrã sempre é melhor fazer um

    for (int i=0; i<N;i++)
    cout << endl;

    onde N é o número de linhas que se querem limpar e cout e endl é c++, mas basta converter para c, já não trabalho com c há uns anos, mas talvez um printf ("\n")?


    cumps
     
  15. HecKel

    HecKel The WORM

    E como controlas monitores com maior resolução? Como controlas essa variação do número de linhas?

    Já agora, porque é que dizes que o system("CLS") não é aconselhado?

    abraços, HecKel
     
  16. jahred

    jahred Power Member

    a consola do msdos tem sempre o mesmo número de linhas independentemente da resolução do ecrã...

    [quote de um professor meu]
    system("seja o que for") não é recomendável, pois torna o programa dependente do sistema operativo, ou mesmo da versão do sistema operativo (nada garante que o Vista tenha os comandos PAUSE ou CLS).
    Eu, por exemplo, não posso executar esse tipo de programas no meu PC, pois uso linux, que não têm PAUSE nem CLS (tem "read" e "clear").
    [/quote]
     
  17. HecKel

    HecKel The WORM

    Mas acabaste de entrar em contradição :P Falas na consola do msdos e depois dizes que não deve estar dependente do sistema operativo..., e se eu usar uma consola do unix? Se não estou em erro, esse número de linhas pode variar...

    abraços, HecKel
     
  18. MadOnion

    MadOnion Folding Member

    [offtopic]
    Em Unix, se não estou em erro são 80 colunas por defeito, agora as linhas não sei.
    [/offtopic]
     
  19. HecKel

    HecKel The WORM

    Pois, também não tenho muita certeza agora..., estive a dar uma olhada pelo google e todas as funções de clearscreen que existem para C não são ANSI C..., mas também não encontrei confirmação sobre se o número de linhas em unix é fixo ou não..., portanto continuo com a dúvida sobre a minha própria afirmação :lol:

    abraços, HecKel
     
  20. jahred

    jahred Power Member

    quando falei em msdos queria dizer a consola do windows...

    system("CLS") não pertence sequer a c, é do windows e por isso é que está dependente do sistema operativo, assim como podes fazer system("qualquer comando"), mas nada te garante que funcione de SO para SO...
    não me parece que exista um comando de c que limpe o ecrã...
    ora uma coisa que resulta, pelo menos no compilador com o qual trabalho (DevC++), se fizer cout << "\x1b[2J"; , ele de facto limpa o ecrã e eu não faço a mínima porquê lol

    quanto ao número de linhas, não te sei dizer se é igual tanto em unix como em windows
     

Partilhar esta Página