Ir para conteúdo

POWERED BY:

Arquivado

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

Betinha xD

Problema com leitura de Char

Recommended Posts

Boa tarde!!

 

Eu leio uma variavel char, e quando mostro ela, ela da "Null". mas ela passa pelos testes de validação.

 

A variavel é a elevador.

 

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
	char elevador,periodo;
	int andar, flag, qtde_moradores, andar_mais_alto,qtde_A,qtde_B,qtde_C;
	qtde_moradores=0;
	andar_mais_alto=0;
	qtde_A=0;
	qtde_B=0;
	qtde_C=0;
	
	do{
		system("cls");
		printf("\tA = %d",qtde_A);
		printf("** Exercicio 17 - Elevadores **\n");		
		printf("\n\t Digite 0 (Zero) para sair.\n "); 
		qtde_moradores++;
		printf("\n\tMorador %d \n",qtde_moradores);			 
		
		do{
			printf("\t(1) Elevador (A,B,C):"); scanf("%s",&elevador); 
		   // Quando digito a na leitura ele não entra neste if, mas entra lá em baixo.
			if (elevador!='0' && elevador != 'A'&& elevador != 'a' && elevador != 'B' && elevador != 'b' && elevador != 'C' && elevador != 'c'){
				printf("\t Elevador invalido. Redigite");
				flag=1;
			}else
			flag=0;				
		}while(flag);
			
		if(elevador!='0'){
			do{
				printf("\t(2)Andar (>0):"); scanf("%d",&andar); 
				if (andar<0){
					printf("\t Andar invalido. Redigite");
					flag=1;
				}else
				flag=0;				
			}while(flag);  
			do{
				printf("\t(3)Periodo (M,N,V):"); scanf("%s",&periodo);
				if (periodo != 'M'&& periodo != 'V' && periodo != 'N' && periodo != 'm' && periodo != 'v' && periodo != 'n'){
					printf("\t Periodo invalido. Redigite");
					flag=1;
				}else
				flag=0;				
			}while(flag);
		
			if(andar>andar_mais_alto)andar_mais_alto=andar;
			if(elevador != 'a')qtde_A++; // Aqui mesmo digitando a na leitura  ele entra no if
			/*switch(elevador){
				case 'a': qtde_A++; break;
				case 'B': qtde_B++; break;  
				case 'C': qtde_C++; break;	  
			}*/
		}
		printf("\televador = %c",elevador);getche(); // Aqui ele mosta elevador = null
	}while(elevador!='0');
	
	printf("\n--Relatorio-----------------------------------------------\n\n");  
	printf("\t(A) Andar mais alto = %d",andar_mais_alto);
	printf("\tA = %d",qtde_A);
	getche();
}

 

Não sei se deu pra entender... uhauahuaa

 

Muito obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

leia a variavel como um char.

printf("\t(1) Elevador (A,B,C):"); scanf("%s",&elevador);

por:

 

printf("\t(1) Elevador (A,B,C):"); scanf("%c",&elevador);

veja c resolve

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu coloque desse jeito e não resolveu...

 

deu certo com:

 

printf("\t(1) Elevador (A,B,C):"); elevador=getche();

na variavel elevador e periodo.

 

 

Muito obrigada!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente está pegando algum lixo do buffer do teclado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é groove...

Ou então ele lê a variável elevador corretamente, mas acontece qualquer coisa com ela mais pra frente.

 

tente fazer:

scanf("%c%*c", &elevador);

Se o problema for o de sujeira de buffer, será resolvido.

Tou sem compilador aqui, assim que chegar em casa eu compilo e vejo o que se passa.

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

[]

 

-------------------------------------

acabei de compilar, debugar e não tem nenhum problema...

 

http://codepad.org/RHIogzzP

 

(note que usei as funções scanf como mostrei acima, se você não entendeu, de uma lida no tópico: System("pause") e fflush(stdin) )

 

retirei a biblioteca conio... ela nm faz nada! e eu nem tenho...)

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.