rgcaldas Posted November 10, 2006 at 11:14 AM Report #63331 Posted November 10, 2006 at 11:14 AM Boas Estou a iniciar-me em C, e encalhei numa cena. Gostaria de saber se consigo fazer algo do genero com arrays: # include <stdio.h> # include <string.h> int main(void) { char opcoes[3][10][50]; //3-menus 10-opcoes por menu 50-caracteres por opcao opcoes[0][0][0] = "[G]estão de Artigos"; opcoes[0][1][0] = "[C]onsumos"; opcoes[0][2][0] = "[T]erminar Aplicação"; } Desde já obrigado por qualquer ajuda Ricardo Gomes
Hipnoted Posted November 10, 2006 at 11:19 AM Report #63333 Posted November 10, 2006 at 11:19 AM Mas queres fazer um menu certo? Com um Switch case fazes isso melhor. Quanto ao que fizeste não vejo problema nenhum, mas sem dares mais informações sobre o problema não te posso dizer mais... "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Rui Carlos Posted November 10, 2006 at 11:27 AM Report #63335 Posted November 10, 2006 at 11:27 AM acho que é mais isto o que tu queres... opcoes[0][0] = "[G]estão de Artigos"; opcoes[0][1] = "[C]onsumos"; opcoes[0][2] = "[T]erminar Aplicação"; Rui Carlos Gonçalves
rgcaldas Posted November 10, 2006 at 11:47 AM Author Report #63341 Posted November 10, 2006 at 11:47 AM Desculpem não me ter explicado bem. A ideia é cria uma função para gerir os menus da aplicação, e passar o array como argumento. Eu tenho 3 menus para fazer e queria poupar nos printfs e nas funções necessárias para mostrar os menus tipo isto: int menu(char opcoes, int menu) { // a variavel menu serve para dizer á função qual o menu a apresentar int x=1,i; char op; do { for (i=0;i <3;i++) { // 3 é o numero de opções de cada menu printf("\n%c",opcoes[menu][i][0]); } scanf("%c",&op) switch(op){ //.... codigo do switch a colocar x = 0 se o user escolher uma opção correcta } }while (x==1); } Obrigado novamente pela ajuda
rgcaldas Posted November 10, 2006 at 12:15 PM Author Report #63349 Posted November 10, 2006 at 12:15 PM acho que é mais isto o que tu queres... opcoes[0][0] = "[G]estão de Artigos"; opcoes[0][1] = "[C]onsumos"; opcoes[0][2] = "[T]erminar Aplicação"; O terceiro nivel tem a ver com eu querer colocar no array 3 menus com 10 opções cada. Quanto ao que fizeste não vejo problema nenhum, mas sem dares mais informações sobre o problema não te posso dizer mais... Realmente tens razão, os erros eram só warnings Mas continuo com um problema quando tento passar o array dentro da função num printf dá-me o seguinte erro: "error:subscripted value is neither array nor pointer" O codigo todo que tenho até agora é: #include <stdio.h> #include <stdlib.h> #include <string.h> int menu(char opcoes, int m); int main(void) { int m; char opcoes[3][10][50]; //3-menus 10-opcoes por menu 50-caracteres por opcao opcoes[0][0][0] = "[G]estão de Artigos"; opcoes[0][1][0] = "[C]onsumos"; opcoes[0][2][0] = "[T]erminar Aplicação"; m = 1; menu(opcoes,m); } int menu(char opcoes, int m) { // a variavel menu serve para dizer á função qual o menu a apresentar int x=1,i; char op; do { for (i=0;i <3;i++) { // 3 é o numero de opções de cada menu printf("\n%c",opcoes[m][i][0]); } scanf("%c",&op); switch(op){ //.... codigo do switch a colocar x = 0 se o user escolher uma opção correcta } }while (x==1); }
Rui Carlos Posted November 10, 2006 at 07:28 PM Report #63442 Posted November 10, 2006 at 07:28 PM tens que fazer como eu disse!!! continuas a colocar 3 níveis na declaração, mas o último nível é para os vários caracteres da string. por isso, ou fazes opcoes[0][0] = "[G]estão de Artigos"; ou opcoes[0][0][0]='['; opcoes[0][0][1]='G'; opcoes[0][0][2]=']'; opcoes[0][0][3]='e'; opcoes[0][0][4]='s'; opcoes[0][0][5]='t'; ... Rui Carlos Gonçalves
brink@ero Posted November 11, 2006 at 12:42 AM Report #63495 Posted November 11, 2006 at 12:42 AM Antes de mais, bem vindo ao fórum rgcaldas. Para esclarecer dúvidas sobre o código C, existe uma secção própria (Tópico movido) Não concordo com o Rui Carlos, isso não é possível fazer assim em C (pelo menos o compilador não devia aceitar isso). Só é possível isso na declaração das variáveis, tipo isto: char variavel[100]={"Gestão de artigos"}; Mas não é isto que queres fazer, então o que fazes é uma cópia de strings e o modo que é o mais aconselhável é: strcpy(opcoes[0][0],"Gestao de artigos"); Ter atenção que declaras a variavel opcao assim: char opcoes[3][10][50]; Ou seja, a variável opcao é um apontador de apontadores, logo não podes passar a variavel para uma função como um char mas sim como um char**. O outro pormenor/conselho, não escrevas na consola letras com acentos e til (á, ã, é, ...) se não arriscas a ver caracteres esquisitos na consola. Cumpr. bk@ero 😛
Saco Posted November 11, 2006 at 01:47 AM Report #63509 Posted November 11, 2006 at 01:47 AM ? é da minha vista ou estás a definir as opções para o menu 0 e depois vais tentar imprimir é o menu 1 que ainda não tem lá nada? Outra coisa, no printf tens %c, assim só vais imprimir o primeiro caracter de cada opção.
rgcaldas Posted November 12, 2006 at 10:28 PM Author Report #63943 Posted November 12, 2006 at 10:28 PM continuas a colocar 3 níveis na declaração, mas o último nível é para os vários caracteres da string. Desculpa Rui, não tinha percebido o que querias dizer. Antes de mais, bem vindo ao fórum rgcaldas. Para esclarecer dúvidas sobre o código C, existe uma secção própria (Tópico movido) Obrigado brink@ero, e peço desculpa pelo engano, não volta a acontecer(espero). Só é possível isso na declaração das variáveis, tipo isto: char variavel[100]={"Gestão de artigos"}; Sim, acabei por fazer assim, não seguei a esperimentar a forma do Rui. O outro pormenor/conselho, não escrevas na consola letras com acentos e til (á, ã, é, ...) se não arriscas a ver caracteres esquisitos na consola. Sim, os acentos foi só por estava a escrever o codigo para por aqui. ? é da minha vista ou estás a definir as opções para o menu 0 e depois vais tentar imprimir é o menu 1 que ainda não tem lá nada? Outra coisa, no printf tens %c, assim só vais imprimir o primeiro caracter de cada opção. Obrigado SacoPlastico, já alterei. Obrigado a todos, o codigo acabou por ficar assim, se acharem que devo mudar algo digam: int main(void) { int m=0,i,x=1,n=3; char opcoes[3][10][50]={ {{"[G]estão de Artigos"},{"[C]onsumos"},{"[T]erminar Aplicacao"}}, {{"[A]tribuir cartao"},{"[R]egistar consumo"},{"[E]fectuar pagamento"},{"[L]ibertar cartao"},{"[C]onsultar consumos"}}, {{"[A]dicionar Artigos"},{"[R]emover Artigos"},{"[V]isualizar Artigos"}} },op; do { op = menu(opcoes,m,n); if (op != 'x'){ switch(m){ //Verifica qual o menu case 0: switch(op){//Verifica a opção do menu 0 case 'g': case 'G': gestArt(); break; case 'c': case 'C': gestCons(); break; case 't': case 'T': x=0; break; default: printf("Por favor, escolha uma das opcoes"); break; }// fim do switch do menu 0 break; case 1: break; case 2: break; } } }while(x!=0); return 0; } char menu(char opcoes[3][10][50], int m,int n) { // a variavel m serve para dizer á função qual o menu a apresentar int x=1,i,valchar,y; char op[10]; y = sizeof(opcoes[m]); printf("%d%d",n,y); for (i=0;i <n;i++) { printf("\n%s",opcoes[m][i]); } fflush(stdin); valchar = scanf("%s",op);//trocar a variavel para char no Windows e testar if (valchar==1){ return op[0]; } } P.S. Apesar da opção GeSHI estar selecionada, o codigo não apace com devia, falta fazer alguma coisa?
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now