Ir ao conteúdo
  • Cadastre-se

C Lendo um char com scanf


Niedson Santana

Posts recomendados

Estou aprendendo a programar e estou quebrando a cabeça para fazer uma estrutura de repetição onde a condição seria um dado do tipo char. 

 

A estrutura deveria se repetir se o valor da variável do tipo char car for igual a 's'. O meu problema é que o valor de char só é lido na primeira execução da estrutura de repetição nas demais acontece como se não existisse a linha 6 como se o programa pulasse a linha 6. 

 

Desde já agradeço a ajuda.

 

segue o código:

#include<stdio.h>
1  main(){
2    float velocidade, velmedia=0, maiorvel=0;
3    int ano, maiorano=0,cont=0;
4    char car;
5    while(car!='n'){
6        scanf("%c",&car); 
7        if(car=='n' )
8        break;
9        cont++;
10        scanf("%i%f", &ano , &velocidade);
11            if(velocidade>maiorvel)
12             maiorvel=velocidade;
13             velmedia+=velocidade;
14             if(ano>maiorano)
15             maiorano=ano;
16             
17        
18        
19    }
20    if(cont!=0 && car=='s')
21    printf("%.2f\n%i\n%.2f", maiorvel ,maiorano ,velmedia/cont);
22    else
23    printf("zero");
24 } 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Olha, para começar, organizar o código.

#include<stdio.h>

 int main(){

   float velocidade, velmedia=0, maiorvel=0;
   int ano, maiorano=0,cont=0;
   char car;

   while(car!='n'){

       scanf("%c",&car);
       if(car=='n'){ // precisa ser if(car=='n' || car=='s') para executar o IF lá em baixo
          break;
       }else{
        cont++;
        scanf("%d%f", &ano , &velocidade);
           if(velocidade>maiorvel){
            maiorvel=velocidade;
             velmedia+=velocidade;
            }
            if(ano>maiorano){
               maiorano=ano;
            }


       }
    }
    // NUNCA VAI CAIR NESSE IF!!!! o while só para se car == n, então car nunca vai ser igual a s;
    if(cont!=0 && car=='s'){
        printf("%.2f\n%i\n%.2f", maiorvel ,maiorano ,velmedia/cont);
    }else{
      printf("zero");
    }
    return 0;
 }

 

Uma Dica, faça debug?

Qual a forma mais simples de fazer debug? printf!!! Coloque printf em toda parte que você quer saber se chegou.

A a melhor forma é a IDE fazer o DEBUG linha por linha e você ver a execução.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Alison Barreiro @Niedson Santana Se deixarmos a lógica de lado, o que importa é manter a sintaxe de acordo com as necessidades, assim como a performance e indentação, portanto certas coisas precisam ser removidas:

 

#include<stdio.h>

int main(){
	float velocidade, velmedia=0, maiorvel=0;
	int ano, maiorano=0,cont=0;
	char car = 's';

 	while(car!='n'){
      		fflush(stdin);
		scanf(" %c",&car);
    	        if(car == 's'){
    			cont++;
        		scanf("%d%f", &ano , &velocidade);
        		if(velocidade>maiorvel){
        			maiorvel=velocidade;
        			velmedia+=velocidade;
        		}
        		if(ano>maiorano){
        			maiorano=ano;
       			}
       		}
    	}
    if(cont!=0){
        printf("%.2f\n%i\n%.2f\n\n", maiorvel ,maiorano ,velmedia/cont);
    }else{
      printf("zero");
    }
    return 0;
 }

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@TYSQUARE89

 

No caso de performance, deveria ser assim:

If tem custo de clock, sempre deve-se evitar ao máximo o uso do if, é regra básica para métodos de projeto de software.

int main(){
	float velocidade, velmedia=0, maiorvel=0;
	int ano, maiorano=0,cont=0;
	char car;
	printf("Digite n para sair ou s para continuar!\n");
    scanf(" %c",&car);
  	// Se for n, nem exucuta o while, passa direto.

 	while(car!='n'){
            printf("Digite o ano e a velocidade!\n");
            scanf("%d%f", &ano , &velocidade);
            if(velocidade>maiorvel){
        		maiorvel=velocidade;
        		velmedia+=velocidade;
            }
            if(ano>maiorano){
                maiorano=ano;
            }
            cont++;
      		// Aguardar usuario digitar n para fechar o porgrama ou qualquer outra coisa e repetir o while
      		printf("Digite n para sair ou s para continuar!\n");
            scanf(" %c",&car);
    	}
    if(cont!=0){
        printf("%.2f\n%i\n%.2f\n\n", maiorvel ,maiorano ,velmedia/cont);
    }else{
      printf("zero");
    }
    return 0;
 }

Coloquei um printf para seu código ficar mais fácil de usar.

 

Só precisa usar flush se você for manipular stream de saída.

 

Código TESTADO.

adicionado 4 minutos depois

E se você tem certeza que vai executar pelo menos uma vez o while, faça assim:

int main(){
	float velocidade, velmedia=0, maiorvel=0;
	int ano, maiorano=0,cont=0;
	char car;

 	do{
            printf("Digite o ano e a velocidade!\n");
            scanf("%d%f", &ano , &velocidade);
            if(velocidade>maiorvel){
        		maiorvel=velocidade;
        		velmedia+=velocidade;
            }
            if(ano>maiorano){
                maiorano=ano;
            }
            cont++;
      		// Aguardar usuario digitar n para fechar o porgrama ou qualquer outra coisa e repetir o while
      		printf("Digite n para sair ou s para continuar!\n");
            scanf(" %c",&car);
    	}while(car!='n');
    if(cont!=0){
        printf("%.2f\n%i\n%.2f\n\n", maiorvel ,maiorano ,velmedia/cont);
    }else{
      printf("zero");
    }
    return 0;
 }

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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