Ir ao conteúdo

C Programa que acaba quando repete um numero


Ir à solução Resolvido por kgin,

Posts recomendados

Postado

Ola a todos, estou com dificuldades em fazer o seguinte exercicio "Escreva um programa que leia uma sequência de números até que o utilizador introduza o mesmo número duas vezes consecutivas. O programa deverá indicar quantos números foram lidos e qual a sua soma."

esta foi a minha tentativa.

#include <stdio.h>
    int main(){
    int n, soma=0, cont=0, i;
        printf("Insira um numero, para sair insira um numero repetido: ");
        scanf("%d",&n);
    while (n!=n){
    
        soma=soma+n;
        cont=cont+1;
        
    }
    printf("A soma dos numeros e %d .\n", soma);
    printf("Foram inseridos %d numeros.", cont);
    }

 

obrigado pelo ajuda desde ja.

Postado

@Math.Pi pode explicar ou mostrar um exemplo? Nas aulas ainda não demos vetores e não estou a perceber o que quer dizer com registro.(algo como o contador para contar a quantidade de numeros escritos?)

  • Solução
Postado

@jorge.b Exemplo

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

#define T_BUFFER 256

int main(int q_arg, char *v_arg[])
{
    char buffer[T_BUFFER];
    int
        n_atual = 0, n_anterior = 0;

    do {
        n_anterior = n_atual;
        printf("Digite o numero anteriormente digitado para encerrar\n>");
        fgets(buffer, T_BUFFER, stdin);
        sscanf(buffer, "%i", &n_atual);
    } while (n_atual != n_anterior);
    return(0);
}

Versão online!

  • Curtir 1
  • Membro VIP
Postado

@jorge.b Erro meu. Não tinha entendido a questão. Achei que não poderia repetir nenhum número digitado anteriormente, mas é só não repetir o mesmo número 2x seguidas.

O algoritmo do @kgin explicou bem. Ele usa uma variável pra comparar o número atual com o anterior. Se não for repetido, ele joga atualiza a variável anterior e faz uma nova leitura.

 

 

Postado

O código terá duas variáveis para guardar os números, uma com o atual e outra com o anterior. Mas pode acontecer das duas guardarem o mesmo valor já no primeiro ciclo e encerrar o loop na primeira entrada.

 

Para evitar isso pode ser feito um teste para apontar o momento de saida do loop apenas após a segunda entrada, p.ex,

 

int continua = 1;    
int inicio = 1;    
int num = 0;
int anterior = 0;
    
while(continua){
    scanf("%d", &num);
    if(inicio == 0 && anterior == num){
        continua = 0;
    }
    anterior = num;
    inicio = 0;
}

 

Sem a condição o loop termina na primeira entrada caso seja zero.

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!