Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Charles Arnoud

[Resolvido] Compara o conteudo de um poteiro com inteiro

Recommended Posts

ae galera,

estou tentando fazer uma funçao menu q le a opcao desejada pelo usuario,

consistindo se ela eh valida dentro da propria funcao menu e retornando a opcao valida para o programa principal

para q ele chame as outras funcoes conforme a opcao desejada.

o problema eh q eu n estou conseguindo comparar o conteudo do ponteiro para ver se ele eh menor do q 1 ou maior do q 6,

pq os valores validos estao entre um e seis.

 

da uma olhada no q eu fiz... nao da bola pq ele n tah completo e umas partes sao soh para teste, para ver o q foi lido e o q foi retornado:

#include<stdlib.h>
#include<stdio.h>
int menu (int *a)
{
	 printf("Cinema:\n\n1 - Iniciar\n2 - Buscar\n");
	 printf("3 - Venda de entradas\n4 - Salvar\n5 - Fornecer Relatorios\n");
	 printf("6 - Encerrar programa\nDigite opcao desejada: ");
	 do
	 {
	   scanf("%d", &a);
	   printf("\n%d", a);//teste para ver se leu certo
	 }
	 while (*a>6||*a<1);

} 
int main()
{
	int *opcao;
	printf("TESTE:\n");
	menu(opcao);
	printf("menu: %d", opcao);//teste para ver o q foi retornado
	system("pause");
	return 0;
}

 

ele nem chega a retornar o valor para o programa, fecha com um erro qdo tento fazer a comparacao.

alguem sabe como faço isso?

abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

victor@matrix:~/Projects/Imasters$ gcc -g -Wall -Wextra code.c

code.c: In function ‘menu’:

code.c:10: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int **’

code.c:11: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’

code.c:15: warning: control reaches end of non-void function

code.c: In function ‘main’:

code.c:21: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’

Compartilhar este post


Link para o post
Compartilhar em outros sites

int menu (int *a)

Sua função não tem um retorno...troque o tipo dela para void.

void menu(int *a)

Mensagem de erro:

code.c:15: warning: control reaches end of non-void function

---

scanf("%d", &a);

A função espera um ponteiro,e não um ponteiro de ponteiro (int **).

scanf("%d", a);

Mensagem de erro:

code.c:10: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int **’

---

printf("\n%d", a);

Você passou o formato d (decimal [integer]) para a função printf,sendo assim foi isso que ele esperou.Mas você passou a ele um ponteiro de um inteiro (int*).

printf("\n%d", (*a)); /* *nomePonteiro = valor que o ponteiro referencia a regiao na memoria [chulo]*/

Mensagem de erro:

code.c:11: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’

---

printf("menu: %d", opcao);

Mesma coisa do passado.

printf("menu: %d", *opcao);
---

E só uma opinião...acho que ficaria melhor:

void menu(int *a){
	 //Menu
	 puts("Cinema:\n");
	 puts("\t 1 - Iniciar");
	 puts("\t 2 - Buscar");
	 puts("\t 3 - Venda de entradas");
	 puts("\t 4 - Salvar");
	 puts("\t 5 - Fornecer Relatorios");
	 puts("\t 6 - Encerrar programa\n");
	 printf("Digite opcao desejada:");

	 scanf("%d", a);
	 if((*a) > 6 || (*a) < 1){
		 puts("Opcao invalida.\n\n");
		 menu(a);
	 }
}

Que sirva de exemplo a todos...como debugar um programa.

Não sabe inglês?Google meu caro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ingles eu sei

acontece q as mensagens de erro nao sao sempre claras

pq o programa n tem como saber o q você quer fazer, apenas interpreta o q tah escrito

e tem q concordar comigo q a simbologia qdo se usa ponteiros fica bem complicadinha.

 

resolvi mudar e usar funcao com retorno dai deu certo tranquilo

topico resolvido ae

Compartilhar este post


Link para o post
Compartilhar em outros sites

acontece q as mensagens de erro nao sao sempre claras

Tem algo mais claro do que:

code.c: In function ‘menu’:

code.c:10: warning: format ‘%d’ expects type ‘int *’, but argument 2 has type ‘int **’

 

traduzindo:

Na função 'menu':

AVISO: formato '%d' espera tipo 'int *', mas o argumento é 'int **'

 

pq o programa n tem como saber o q você quer fazer, apenas interpreta o q tah escrito

Pois é... o computador tem o péssimo habito de fazer o que você disse, e não o que você quis dizer...

 

e tem q concordar comigo q a simbologia qdo se usa ponteiros fica bem complicadinha.

No começo é meio chato, mas você se acostuma.

O truque é separar bem as coisas, usar parenteses para ficar mais claro, etc...

por exemplo:

while ( (*a) > 6 || (*a) < 1);

mais legível, não?

Compartilhar este post


Link para o post
Compartilhar em outros sites
acontece q as mensagens de erro nao sao sempre claras

pq o programa n tem como saber o q você quer fazer, apenas interpreta o q tah escrito

 

Na maioria das vezes elas são claras o suficiente, e não como "Source not found" no meio da execução de um programa em Java, disparando uma exceção NoSuchFile quando você sabe que a porcaria do arquivo no qual você está escrevendo existe e a subárvore possui as permissões adequadas. E, p/ te deixar mais de cara ainda, o programa funciona corretamente quando executado fora da IDE, num terminal, sem lançar uma exceção.

 

Enfim, o fato é que mensagens do compilador ajudam, mas parece quem nem todo mundo se toca disso.

 

 

e tem q concordar comigo q a simbologia qdo se usa ponteiros fica bem complicadinha.

 

Quando se está acostumado, não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.