duvida em c

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!
 
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:
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:
 
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:
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
 
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
 
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
 
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]
 
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
 
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
 
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
 
Back
Topo