View Full Version : duvida em c
Fox_dc17 20-04-2007, 13:47 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 terminar por completo podes por um exit; do estilo break;
Fox_dc17 20-04-2007, 14:18 tip mas com break o programa nao corre!:s nao percebo o porque
inda sou mt verde em programacao
Flyer_rp 20-04-2007, 16:00 Para lipares o ecra podes usar esta função #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.
Fox_dc17 20-04-2007, 21:56 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:
podes sempre usar a biblioteca conio.h, é muito simples limpar. e acho que dá para usar para o que queres. cumps
Fox_dc17 22-04-2007, 15:13 eu uso cin e cout nao me ajeito com o printf e scanf! portanto a biblioteca ke uso e a iostream!
Olha que a thread é sobre C ;)
Pelo que vi no google os operadores << e >> não são válidos em C.
http://people.cs.uchicago.edu/~iancooke/osstuff/ccc.html
Se estiver errado..., a culpa é do google :P
abraços, HecKel
<< e >> são válidos em C, são operadores bit a bit. (completamente diferente do significado que têm no C++)
MaxDamage 22-04-2007, 23:25 << e >> são válidos em C, são operadores bit a bit. (completamente diferente do significado que têm no C++)
Exacto, são operações de deslocamento de bits. Atenção que são dois sinais ">" ou "<", e não os "»" "«" :P
system("clear") em linux ou system("cls") em windows... não esquecer o #include<stdlib.h>
dark_splinter 23-04-2007, 01:38 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....
Fox_dc17 23-04-2007, 08:51 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ã...
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").
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
MadOnion 23-04-2007, 13:03 Em Unix, se não estou em erro são 80 colunas por defeito, agora as linhas não sei.
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
"Não há maneira" do C te limpar o ecrã por ele não saber onde está a correr... pode até nem estar a correr num terminal :)
A única solução decente, foi como te disse usares a função system que corre um comando de "sistema"... por isso é que no windows se usa "cls" e no linux "clear"...
mas a melhor maneira é mesmo não usar nada, um \n no final de cada "frase" serve perfeitamente... e se realmente estás preocupado começa a pesquisar por wxwidgets, gtk, etc ;)
|
|