Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado

Aliás!

 

if(car=='n'){  break; }

Esse if não serve pra nada, o while já checa isso...

 

Use:

while(car!='n' || car!='s')

Se car for igual a n ou s, sai do while.

 

Pegue o meu código acima, remova o if, atualize o while e teste.

 

  • Curtir 1
Postado

@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
Postado

@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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!