Ir ao conteúdo
  • Cadastre-se

posso retirar um valor da minha variavel em C?


Posts recomendados

eai galera, meu primeiro post.

Assim, eu comecei a estudar C inicio desse ano e parei durante a greve, consegui aprender umas coisas e outras, o suficiente pra me virar, porém, empaquei nesse problema que encontrei no começo do meu joguinho.

 

bem o problema é assim: a minha variavel "escolha" recebe o valor que eu quero na primeira etapa mais logo depois eu chamo ela de novo tentando atribuir um novo valor pra ela mas é como se o compilador ignorasse o meu segundo scanf (linha 38) ai eu pensei que podia ser porque ela já tinha um valor atribuido e por isso não dava pra alterar...

eu ja bati cabeça varias vezes e deixei parado por um tempão esse meu projetinho mas agora to afim de voltar a mexer nele e preciso passar esse problema, alguem pode me ajudar nessa missão? dicas pro jogo, sugestões para o codigo, ensinamentos de algum mago da programação, sou um tanto novo nessa area então eu posso ter passado batido em alguma besteira e não saber, enfim.

#include <stdio.h>#include <stdlib.h>#include <string.h>//----------cabeçalho de funções-----------------	//-------funções de menu------------	void status(float vida,float mana,float exp);		//-------funções de batalha------------	int experiencia_nivel (float exp, float exp_ganha, float nivel);	//-----------------FUNÇÃO PRINCIPAL---------------int main(int argc, char *argv[]) {	char loop; //variavel do loop.	char escolha; // usada pra escolha de opções no menu.	float status [4];/*status [0] = vida do personagem.	  				   status [1] = mana do personagem.	  				   status [2] = exp do personagem.	  				   status [3] = level do personagem.*/	do {		system ("cls");		printf("                              BATALHA DE RPG\n\n\n\n");		printf("                        '1' - Novo Jogo\n");		printf("                        '2' - Sair\n                        ");		scanf("%c", &escolha);						if (escolha = 1) {						printf ("%c", escolha);			printf ("\n\n                              qual sua classe?\n\n\n");			printf ("                        '1' - Assassino\n");			printf ("                        '2' - Mago\n");			printf ("                        '3' - guerreiro\n                        ");			scanf ("%c", &escolha);			system ("pause");						switch(escolha) {			case '1': //classe assassino				status [0]= 150;				status [1]= 150;				status [2]= 0;				status [3]= 1; 				break;							case '2': //classe mago				status [0]=	100;				status [1]= 200;				status [2]= 0;				status [3]= 1;				break;							case '3': //classe guerreiro				status [0]= 200;				status [1]= 100;				status [2]= 0;				status [3]= 1;				break;			}		}		else if (escolha = 2) {					printf ("\n\n\n\n\n\n                              ate mais!\n");			loop = 2;		}		else {		}				}	while(loop != 2);	return 0;}//---------------------------------------------FUNÇÕES-------------------------------------//	exibir status do personagem:void status (float vida, float mana, float exp) {	printf ("--------------------------------------------------------------------------------");	printf ("-----l    Life    l--------l    Mana    l------------l    Exp     l-------------");	printf ("-----l     %.0f    l--------l     %.0f    l------------l   %.2f    l-------------", vida, mana, exp);	printf ("--------------------------------------------------------------------------------\n\n");}	//	calcular o ganho de experiencia e possivel passagem de nivel:int experiencia_nivel (float exp, float exp_ganha, float nivel) {	exp += exp_ganha;	if (exp >= 100){		nivel++;		exp -= 100;	}}
Link para o comentário
Compartilhar em outros sites

Um dos seu erros é que você esta passando um valor inteiro para uma variável que espera um caractere, troca tipo da variável escolha, para int.

no scanf ("%d", &escolha);

 

no primeiro if voce ta colocando que escolha recebe 1 no segundo if escolha recebe dois troque o operador (=) para ( == )

 

você declarou tres argumentos nas duas funcoes mas não esta usando no corpo da funcao.

 

agora eu não entendi o que realmente as duas funcoes devem fazer.

 

  1. void status(float vida,float mana,float exp);
  2.  
  3. //-------funções de batalha------------
  4. int experiencia_nivel (float exp, float exp_ganha, float nivel);
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

você declarou tres argumentos nas duas funcoes mas não esta usando no corpo da funcao.

 

agora eu não entendia o que realmente as duas funcoes tem que fazer.

 

  1. void status(float vida,float mana,float exp);
  2.  
  3. //-------funções de batalha------------
  4. int experiencia_nivel (float exp, float exp_ganha, float nivel);

poise essas funções eu criei por impulso mesmo, ainda não usei elas porque ainda tava no inicio mais a minha ideia era que a função experiencia_nivel funcionasse pra dizer se depois de uma batalha o persongem passa de nivel ou não e a status era pra ser uma função "cabeçalho" na batalha, de forma que ela informasse os status do persongem no momento.

 

Troque  scanf("%c", &escolha); por  scanf("%c%*c", &escolha); e veja se funciona.

Isis, esse outro tipo de scanf que você me recomendou, como ele funciona? eu nunca usei um desse tipo O.o

 

 

a scanf sempre deixa dados no buffer, trate esse erro pondo por exemplo o seguinte código após a chamada de uma scanf:

while ('\n' != getchar ()) continue;

cara desculpa minha ignorância mas eu meio que não entendi esse while, tem como você me explicar o que ta acontecendo nele? ^-^"

Link para o comentário
Compartilhar em outros sites

 

cara desculpa minha ignorância mas eu meio que não entendi esse while, tem como você me explicar o que ta acontecendo nele? ^-^"

 
while ('\n' != getchar ()) continue; 

Função getchar1: pega caracteres um a um do input até o último '\n'.

continue2: é uma declaração do grupo de declarações de controle de loop, faz continuar e tem aplicabilidade utilíssima em situações específicas.

 

O conjunto de tudo faz a limpeza de lixo resultante de entradas erradas por motivo de digitação do usuário ou da falta de conhecimentos de formatação em scanf.
Em fim, o conjunto dar segurança ao scanf, é um recurso opcional, como já viu, é só mais uma forma de fazer um bom código.

 

1: http://www.cplusplus.com/reference/cstdio/getchar/

2: http://www.tutorialspoint.com/cprogramming/c_continue_statement.htm

Link para o comentário
Compartilhar em outros sites

Isis, esse outro tipo de scanf que você me recomendou, como ele funciona? eu nunca usei um desse tipo O.o

Se chama supressão de atribuição (em inglês você vai encontrar como assignment suppression).

http://en.cppreference.com/w/c/io/fscanf

"assignment-suppressing character *. If this option is present, the function does not assign the result of the conversion to any receiving argument."

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...