Ir para o conteúdo
rgcaldas

[C] Ajuda: String arrays

Mensagens Recomendadas

rgcaldas    0
rgcaldas

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

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";

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

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);
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    311
Rui Carlos

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&#227;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';
...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
brink@ero    0
brink@ero

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  :P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Saco    0
Saco

:hmm: é 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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

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.

:hmm: é 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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade