• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rgcaldas

[C] Ajuda: String arrays

9 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

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