Ir ao conteúdo
  • Cadastre-se

C código dando erro na parte do for


Visitante

Posts recomendados

Faça um programa que leia uma frase e indique quantas vogais ‘a’, ‘e’, ‘i’, ‘o’, e ‘u’ tem na frase.

Exemplo de frase: Vou contar as letras

3 vogal(is) a

1 vogal(is) e

0 vogal(is) i

2 vogal(is) o

1 vogal(is) u

 

#include <stdio.h>
#include <stdlib.h>

int main()

{
    char frase[60], vog[10];
    int palavra=1,vogais,i,e;
 
    vog[0] = 'a';
    vog[1] = 'e';
    vog[2] = 'i';
    vog[3] = 'o';
    vog[4] = 'u';
    vog[5] = 'A';
    vog[6] = 'E';
    vog[7] = 'I';
    vog[8] = 'O';
    vog[9] = 'U';
  
    printf( "Escreva uma frase: \n");
    gets(frase);
 
    for ( i = 0; i < strlen(frase);i++)
  
    {
        
        if ( frase[i] == 32 )
    {
            palavra++;
        }
    else
    {
            for ( e = 0; e <= 9; e++ )
        
        {
                if ( frase[i]==vog[e] )
                    vogais++;
            }
        }
    }
    printf("A frase %s contém %i palavras e %i vogais \n",frase,palavra,vogais);
   
    system("pause");
}

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Rebeka disse:

Faça um programa que leia uma frase e indique quantas vogais ‘a’, ‘e’, ‘i’, ‘o’, e ‘u’ tem na frase.

Exemplo de frase: Vou contar as letras

3 vogal(is) a

1 vogal(is) e

0 vogal(is) i

2 vogal(is) o

1 vogal(is) u

 

#include <stdio.h>
#include <stdlib.h>

int main()

{
    char frase[60], vog[10];
    int palavra=1,vogais,i,e;
 
    vog[0] = 'a';
    vog[1] = 'e';
    vog[2] = 'i';
    vog[3] = 'o';
    vog[4] = 'u';
    vog[5] = 'A';
    vog[6] = 'E';
    vog[7] = 'I';
    vog[8] = 'O';
    vog[9] = 'U';
  
    printf( "Escreva uma frase: \n");
    gets(frase);
 
    for ( i = 0; i < strlen(frase);i++)
  
    {
        
        if ( frase[i] == 32 )
    {
            palavra++;
        }
    else
    {
            for ( e = 0; e <= 9; e++ )
        
        {
                if ( frase[i]==vog[e] )
                    vogais++;
            }
        }
    }
    printf("A frase %s contém %i palavras e %i vogais \n",frase,palavra,vogais);
   
    system("pause");
}

Dá pra ver que você copiou esse programa de algum lugar porque ele está contando também o número de palavras, o que não é pedido no enunciado.

 

O problema é que a variável "vogais" não está sendo inicializada antes de ser incrementada, então você está incrementando algum valor que já estava lá (lixo da memória).

 

Esse programa não conta cada vogal individualmente, então mesmo se estivesse correto não seria a solução para o seu problema.

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

Em 19/09/2021 às 16:06, Rebeka disse:

Faça um programa que leia uma frase e indique quantas vogais ‘a’, ‘e’, ‘i’, ‘o’, e ‘u’ tem na frase.

Exemplo de frase: Vou contar as letras

3 vogal(is) a

1 vogal(is) e

0 vogal(is) i

2 vogal(is) o

1 vogal(is) u

 

 

@Rebeka parece que você não pensou muito antes de começar a escrever isso...

 

Seu curso adota um livro? Você tem um livro? Estuda sózinha? Recomendo muito ter um livro ou dois e ter algum site de documentação ou de exemplos. E frequentar um forum como esse aqui pode ser bem útil, porque pode ver soluções e perguntar para outros usuários e tal.

 

De volta ao programa

 

Escreva em torno dos dados. E não escreva nada sem um propósito. voce tem uma frase e 5 contadores. E você sabe o que são vetores porque declarou dois deles em seu código ;) 

 

E considere:

 

#include <stdio.h>
int main(void)
{
    char frase[] = "Vou contar as letras";
    int  vogal[] = {0, 0, 0, 0, 0};  
    char letra[] = "AEIOU";
    return 0;
};

 

Não faz sentido testar seu programa COM ESSA FRASE até os contadores de vogais terem os valores que você mostrou aqui:

 

Em 19/09/2021 às 16:06, Rebeka disse:

Exemplo de frase: Vou contar as letras

3 vogal(is) a

1 vogal(is) e

0 vogal(is) i

2 vogal(is) o

1 vogal(is) u

 

Porque vai perder tempo com outras frases e coisas antes de acertar esses valores?

 

Para que vai ficar digitando coisas a cada vez que for testar seu programa?

Só vai perder tempo. 

Nunca escreva um programa interativo. É chato pra caramba. Deixe para depois isso de ler coisas.

 

Um programa que nada faz

 

#include <stdio.h>
int main(void)
{
    char frase[] = "Vou contar as letras";
    int  vogal[] = {0, 0, 0, 0, 0};
    char letra[] = "AEIOU";
    return 0;
};

 

comece por isso.

 

Sobre seu programa

 

Use o tal botão code como está bem escrito no forum no primeiro tópico. Veja a diferença

 

#include <stdio.h>
#include <stdlib.h>

int main()

{
    char frase[60], vog[10];
    int  palavra = 1, vogais, i, e;

    vog[0] = 'a';
    vog[1] = 'e';
    vog[2] = 'i';
    vog[3] = 'o';
    vog[4] = 'u';
    vog[5] = 'A';
    vog[6] = 'E';
    vog[7] = 'I';
    vog[8] = 'O';
    vog[9] = 'U';

    printf("Escreva uma frase: \n");
    gets(frase);

    for (i = 0; i < strlen(frase); i++)
    {
        if (frase[i] == 32) { palavra++; }
        else
        {
            for (e = 0; e <= 9; e++)
            {
                if (frase[i] == vog[e]) vogais++;
            }
        }
    }
    printf(
        "A frase %s contém %i palavras e %i vogais \n", frase, palavra,
        vogais);

    system("pause");
}

 

Tudo fica separado e colorido e mais simples para alguém copiar.

 

Sobre seu código:

  • não use system(). Não estará fazendo nada nem aprendendo nada.
  • nunca use gets() isso nem existe há anos em muitos ambientes. Use fgets().
  • como te disse, não faça nada interativo até ter um mínimo funcionando. Use a frase que já tem e os contadores até dar o valor que você quer. Não perca tempo.
    char frase[60], vog[10];
    int  palavra = 1, vogais, i, e;

    vog[0] = 'a';
    vog[1] = 'e';
    vog[2] = 'i';
    vog[3] = 'o';
    vog[4] = 'u';
    vog[5] = 'A';
    vog[6] = 'E';
    vog[7] = 'I';
    vog[8] = 'O';
    vog[9] = 'U';

 

  • não declare mais que uma variável por linha. É grátis usar linhas. Só atrapalha escrever assim. E entenda que essas vog[] são a mesma coisa que escrever
    char vog[] = "aeiouAEIOU";


 que talvez concorde que é muito mais simples de digitar e ler. Mas acho que nem precisa desse vetor em seu programa.

 

Escrevendo (ainda) em torno dos dados

 

Aumentando um pouco o programa de 6 linhas que eu te mostrei

 

#include <stdio.h>
int main(void)
{
    char frase[] = "Vou contar as letras"; 
    int  vogal[] = {0, 0, 0, 0, 0};  
    char letra[] = "AEIOU";
    // aqui vai o codigo para contar as vogais
    for (int i = 0; i < 5; i += 1)
        printf( "%d vogal (is) '%c' ou '%c'\n", 
               vogal[i],
               letra[i], letra[i] + ('a' - 'A') );
    return 0;
};

 

Esse loop no final mostra os totais. Veja o que sai na tela

 

0 vogal (is) 'A' ou 'a'
0 vogal (is) 'E' ou 'e'
0 vogal (is) 'I' ou 'i'
0 vogal (is) 'O' ou 'o'
0 vogal (is) 'U' ou 'u'

 

no lugar daquele comentário entra o código que conta as letrinhas e tal. Mas entenda que antes mesmo de começar a pensar nisso --- contar as letras --- você já tem um programa compilável que mostra os dados dos contadores no formato da saída do exemplo usando contadores de verdade...

 

Sugiro que escreva assim

 

 

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