Ir ao conteúdo
  • Cadastre-se

Compila mas para de funcionar


yuripedrorj

Posts recomendados

Eu estou iniciando ainda e para testar o que estudei até o presente momento, decidi brincar um pouco. Então pensei num "jogo" em que aparece o ano e o usuário tenta acertar o campeão da Copa do Mundo. A princípio não quis programar se o usuário errou ou acertou, só depois que rodar esse primeiro código, que é o seguinte:

#include <iostream>
#include <string.h>
using namespace std;

int main(void){

    int ano;
    char time[15];
    char i;

    printf("-----------------------------------------------------------\n");
    printf("        J O G O  D A S  C O P A S  D O  M U N D O          \n");
    printf("-----------------------------------------------------------\n");
    printf("A seguir, digite quem são os campeoes dos respectivos anos\n");

          
    printf("\n");
    
    for(ano = 1930 ; ano < 2015 ; ano = ano + 4){
        printf("Quem foi o campeao de %d ?\n", ano);
        scanf("%s", &time[ i ]);
        setbuf(stdin, NULL);
    }
    
    
    for(ano = 1930 ; ano < 2015 ; ano = ano + 4){
        printf("O campeao de %d foi o %s \n",ano, time[ i ]);
    }

    system ("pause");
    return 0;
}

Quando tento executar, ele para de funcionar, mas não consigo achar o problema.

Link para o comentário
Compartilhar em outros sites

Boa tarde yuripedrorj

 

Talvez o motivo do seu código estar travando é devido ao fato do seu vetor não possuir tamanho o suficiente para armazenar todo os dados digitados pelo usuário, visto que, a variável ano possui o valor de 1930 e você limitou a estrutura de repetição FOR para 2015. 

Fazendo as contas, a quantidade de copas do mundo realizadas até hoje excede o tamanho do seu vetor TIME de 16 posições (o zero também conta como posição). De uma maneira mais simplificada, a condição "ano < 2015" precisa de mais de 16 posições, quando o vetor excede o tamanho ele trava. Para se ter uma ideia, tivemos até hoje 20 copas do mundos e o seu vetor é de 16, coloque o tamanho 21.

Verifique este pequeno detalhe e tente novamente.

Outra coisa que notei, você esta usando muito a variável ANO nas repetições.

Procure declarar outras variáveis ao invés de repeti-las, assim você ira se confundir.

Verifique a sua variável de posição "i", ela não esta sendo implementada. Toda vez que o loop do FOR for executado deve-se implementa-la com i++;.

 

for(ano = 1930 ; ano < 2015 ; int aux=ano + 4){
        printf("Quem foi o campeao de %d ?\n", ano);
        scanf("%s", &time[ i ]);
        setbuf(stdin, NULL);

        i++;
    }

 

Não sou programador, espero ter ajudado!

 

Att.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 hora atrás, Murilostersi disse:

Boa tarde yuripedrorj

 

Talvez o motivo do seu código estar travando é devido ao fato do seu vetor não possuir tamanho o suficiente para armazenar todo os dados digitados pelo usuário, visto que, a variável ano possui o valor de 1930 e você limitou a estrutura de repetição FOR para 2015. 

Fazendo as contas, a quantidade de copas do mundo realizadas até hoje excede o tamanho do seu vetor TIME de 16 posições (o zero também conta como posição). De uma maneira mais simplificada, a condição "ano < 2015" precisa de mais de 16 posições, quando o vetor excede o tamanho ele trava. Para se ter uma ideia, tivemos até hoje 20 copas do mundos e o seu vetor é de 16, coloque o tamanho 21.

Verifique este pequeno detalhe e tente novamente.

Outra coisa que notei, você esta usando muito a variável ANO nas repetições.

Procure declarar outras variáveis ao invés de repeti-las, assim você ira se confundir.

Verifique a sua variável de posição "i", ela não esta sendo implementada. Toda vez que o loop do FOR for executado deve-se implementa-la com i++;.

 

for(ano = 1930 ; ano < 2015 ; int aux=ano + 4){
        printf("Quem foi o campeao de %d ?\n", ano);
        scanf("%s", &time[ i ]);
        setbuf(stdin, NULL);

        i++;
    }

 

Não sou programador, espero ter ajudado!

 

Att.

 

Nesse caso, não deveria ser usada uma matriz no lugar do vetor?

Pelo que entendi, 16 é a quantidade de caracteres de um vetor de char e não a quantidade de times/seleções. Para que sejam armazenados os nomes de todas as seleções, seria necessário uma matriz.

Link para o comentário
Compartilhar em outros sites

15 horas atrás, Math.Pi disse:

 

Nesse caso, não deveria ser usada uma matriz no lugar do vetor?

Pelo que entendi, 16 é a quantidade de caracteres de um vetor de char e não a quantidade de times/seleções. Para que sejam armazenados os nomes de todas as seleções, seria necessário uma matriz.

Uma matriz também pode ser usada, em uma linha armazena os anos de copas do mundo e na outra linha as seleções.

No vetor, o usuário digita somente nomes de seleções. Ou seja, ele entra somente com 1 tipo de resposta. Lembrando que de 1930 á 2015, houve períodos em que não tiveram copas do mundo como por exemplo de 1938 á 1950, ou seja, no For poderia ser feita uma condição que não deixe inserir nesses anos (1942 e 1946). 

Com matriz:

string times[1][20];

int i, aux, ano = 1930, j = 0, a = 1;

 

for( i = 0 ; ano  <= 2014 ; i++){

       if (ano =! 1942 && ano =! 1946)     /*não inserir nesses anos */

        {

                times[ j ][ i ] = ano;     /* inserir os anos na linha 0 e nas colunas de acordo com o "i" */
                printf("Quem foi o campeao de %d ?\n", ano);
                scanf("%s", &times[ a ][ i ]);
                setbuf(stdin, NULL); 

         }

         ano = ano + 4;         /* acrescentar os anos de copa */
    }

Espero ter ajudado.

 

Att.

Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!