Ir ao conteúdo

Problemas com exercício, creio que o problema seja char


Ir à solução Resolvido por Voronel,

Posts recomendados

Postado

Olá, comecei recentemente a estudar C++ e comecei fazer uma lista de exercícios e cheguei nesse:

Faça um programa que leia uma sequência de caracteres terminada por "F" (a variável é do tipo char, que se caracterizará por uma letra), sendo que cada caractere na lista indica se o veículo é carro ("C"), caminhão ("H"), motocicleta ("M") ou ônibus ("O"). O programa deverá informar no final o número total de carros, caminhões, motos e ônibus, além do percentual de cada categoria em relação ao total de veículos.

O que eu entendi disso é que o programa deve ler uma sequencia que terá diversas letras e ele deverá contar quantos C, H, M e O aparecem até chegar em um "F". 

E então, eu fiz isso:

#include <stdio.h>

main()
{    
    int i, cci, hhi, mmi, ooi, totali;
    float ccf, hhf, mmf, oof, totalf;
    char seq[0];
 
    printf("Digite uma sequencia de letras maiusculas ©, (H), (M) ou (O) terminada em (F):\n");
    scanf("%s", &seq);
 
    for (i=0; seq != 'F'; i++) 
    {                          
        
        if (seq == 'C')
        {
            cci++;
            totali++;
        }
        else
 
        if (seq == 'H')
        {
            hhi++;
            totali++;
        }
        else
 
        if (seq == 'M')
        {
            mmi++;
            totali++;
        }
        else
 
        if (seq == 'O')
        {
            ooi++;
            totali++;
        }
}
 
    totali=cci+hhi+mmi+ooi;
    ccf=cci;
    hhf=hhi;
    mmf=mmi;
    oof=ooi;
    totalf=totali;
 
    printf("\nNumero Total de Veiculos: %d", totali);
    printf(" \nNumero de Carros: %d", cci);  
    printf(" \nNumero de Caminhoes: %d", hhi);
    printf(" \nNumero de Motocicletas: %d", mmi); 
    printf(" \nNumero de Onibus: %d\n", ooi);
    printf("\nPorcentagens:"); 
    printf(" \n Carros: %f", (ccf/totalf)*100);
    printf(" \n Caminhoes: %f", (hhf/totalf)*100);
    printf(" \n Motocicletas: %f", (mmf/totalf)*100);
    printf(" \n Onibus: %f", (oof/totalf)*100);
}
 
Provavelmente deve haver diversas linhas desnecessárias e erros, mas é porque ainda não sei muito.
Enfim, o problema é que sempre que ponho para executar, o número de Carros sempre tem 1 a mais do que deveria e o de Motocicletas 81 a mais. Já fiz a parte da repetição/contagem com for, while, do while, switch case e agora com if e else. E nada funcionou. Fora que eu tentei ver se seria possível fazer ele ler letras maiúsculas e minúsculas e também mostrar algum aviso caso a sequencia não tenha um F mas simplesmente aparecia uma janela dizendo que ele tinha parado de funcionar. E para piorar eu não faço a mínima ideia do que estou fazendo errado.
 
Alguém saberia como resolver isso?
 
Agradeço desde já pela atenção.
Postado

Inicializar suas variáveis vai te livrar de muitos erros:
 

  int i, cci, hhi, mmi, ooi, totali;    float ccf, hhf, mmf, oof, totalf;

Estude mais sobre o tipo char, isso está errado:
 

 char seq[0];

Estude mais sobre como usar o scanf com o tipo char/string, isso também ta errado:
 

scanf("%s", &seq);
  • Solução
Postado

Fiz de um jeito, refiz de outro, até que deu certo. Ficou assim: 

 

#include <stdio.h>
#include <string.h>
main()
{
    float cf=0, mf=0, hf=0, of=0, total=0;
    char seq[2][100];
    int i=0, fi=0;
    
    printf("Escreva a sequencia:\n");
    scanf("%s", seq[1]);
    
    for(i=0; i<strlen(seq[1]); i++)
    {
        switch (seq[1])
        {
        
         case 'c': case 'C':
             cf=cf+1;
             total=total+1;
         break;
            
            case 'm': case 'M':
             mf=mf+1;
                total=total+1;
            break;
            
            case 'h': case 'H':
             hf=hf+1;
                total=total+1;
            break;
            
            case 'o': case 'O':
             of=of+1;
                total=total+1;
            break;
            
            case 'f': case 'F':
             i=strlen(seq[1]);
             fi++;
            break;
        }
    }
    if (fi == 0)
    printf("Final da sequencia nao encontrado (F)");
    else
    {
    printf("Carros = %.0f\nMotos= %.0f\nCaminhoes= %.0f\nOnibus= %.0f\nTotal de veiculos = %.0f\n", cf, mf, hf, of, total);
    printf("\nPorcentagens:\n");
    printf("Carros = %.2f\n", (cf/total)*100);
    printf("Motos = %.2f\n", (mf/total)*100);
    printf("Caminhoes = %.2f\n", (hf/total)*100);
    printf("Onibus = %.2f\n", (of/total)*100);
}
}

 

O problema estava na hora de por o comando 'for' para ler cada caractere da string.

 

Obrigado a todos que tentaram ajudar.  :)

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