Ir ao conteúdo
  • Cadastre-se

C Não estou conseguindo fazer um programa com WHILE


Robs156

Posts recomendados

O exercício é o seguinte: Crie um algoritmo que leia o valor inicial da contagem, o valor final e o incremento, mostrando em seguida todos os valores no intervalo: Ex: Digite o primeiro Valor: 3 Digite o último Valor: 10 Digite o incremento: 2 Contagem: 3 5 7 9 Acabou!

 

Não estou conseguindo incrementar, o programa fica em um loop. Segue meu código:

#include <stdio.h>

int main(void) {
  int n, i=0, j, d=0;

  printf("Digite o inicio: ");
  scanf("%d", &n);

  printf("Digite o final: ");
  scanf("%d", &j);

  printf("Digite o incremento: ");
  scanf("%d", &d);
  while(n < j){
    printf("%d", i);
    i+=d;
  }
  return 0;
}

 

 

 

prog.jpeg

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Olá Robs156, como vai?

 

Segue algumas prints funcionando e a source. 

 

spacer.png

 

spacer.png

 

#include <stdio.h>

int main(void){

int a, b, c;

printf("Digite o inicio: ");
scanf("%d", &a);

printf("Digite o final: ");
scanf("%d", &b);

printf("Digite o incremento: ");
scanf("%d", &c);

while(a <= b){

        printf("Os numeros sao: %d\n", a);

        a+=c;
}

return 0;

}

 

Até a próxima.

 

By ZTM

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

while(n < j){
    printf("%d", i);
    i+=d;
  }

 

Dentro do loop não muda o valor de n ou j. Como acha que seu programa iria terminar?

 

E está incrementando o incremento ??????  

 

        printf("%d", i);

 

Não fique surpreso pelos valores saírem grudados na tela já que não deixou espaço entre eles.

 

NUNCA escreva um programa interativo. Qual o propósito de ler TODA VEZ os valores de início, fim e incremento ANTES de saber se a lógica está certa?

 

É muito mais simples escrever

 

    int ini = 1;
    int final = 6;
    int inc = 1;

 

e testar usando valores conhecidos e nomes razoáveis, como te disse antes.

 

Compare com isso

 

#include<stdio.h>

int main(void)
{
    int ini = 1;
    int final = 6;
    int inc = 1;

    printf(
        "inicio = %d, final = %d, incremento = %d\n", ini,
        final, inc);

    int valor = ini;

    printf("\nwhile: ");
    while (valor < final)
    {
        printf("%d ", valor);
        valor += inc;
    }

    printf("\nfor: ");
    for (int valor = ini; valor < final; valor += inc)
        printf("%d ", valor);

    valor = ini;

    printf("\ndo: ");
    do {
        printf("%d ", valor);
        valor = valor + inc;
    
    } while (valor < final);

    printf("\ngoto: ");

    valor = ini;
loop:
        printf("%d ", valor);
        valor = valor + inc;
        if (valor < final) goto loop;

    return 0;
}

 

Que mostra

 

inicio = 1, final = 6, incremento = 1

while: 1 2 3 4 5
for: 1 2 3 4 5
do: 1 2 3 4 5
goto: 1 2 3 4 5

 

Faça seu programa trabalhar por você e mostre os valores e as outras maneiras comuns de fazer isso --- loop --- em C (Uma outra maneira seria usar recursão). 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • mês depois...
Em 14/12/2022 às 03:00, Robs156 disse:

O exercício é o seguinte: Crie um algoritmo que leia o valor inicial da contagem, o valor final e o incremento, mostrando em seguida todos os valores no intervalo: Ex: Digite o primeiro Valor: 3 Digite o último Valor: 10 Digite o incremento: 2 Contagem: 3 5 7 9 Acabou!

 

Não estou conseguindo incrementar, o programa fica em um loop. Segue meu código:

 

prog.jpeg

O programa fica em loop porque você provavelmente deu um valor de n sendo menor que o valor de j, sendo que no seu loop while nem o valor n, nem o de j são modificados. Por exemplo, se eu digo que n = 5 e j = 10 e mando o programa rodar sem alterar nenhum deles, pela lógica da matemática 5 sempre vai ser menor que 10 e o programa não vai sair do loop, seja lá qual for. Só irá sair quando acabar o espaço na memória.

Os incrementadores i e j geralmente são usados (e declarados) num loop 'for', evite usar fora desse tipo de loop ou para outras funções como while. Você deu o nome a uma variável de 'd' sendo que na linguagem C existe esse comando "%d" que é comumente usado (ele indica pro scanf um valor inteiro decimal), isso pode causar confusão. É melhor usar outro nome pra essa variável.

Tenta entender linha por linha do programa e o resultado lógico que elas implicam.

Vou dar um exemplo de um loop while pra ficar mais claro. Esse é um programa que conta de 2 em 2 e vai até 20, começando em zero:

 

#include <stdio.h>

int main()
{
    int contador = 0;
    int incrementador = 2;
    
    printf("Iniciando contagem de 2 em 2...");
    
    while (contador <= 20) // Enquanto o contador for menor ou igual a 20, o programa vai executar o código no escopo do while{}
    {
        printf("\n%d", contador);
        contador = contador + incrementador; // também pode ser escrito: contador += incrementador; 
    }

    printf("\nA contagem foi encerrada"); // Esse '\n' serve para pular uma linha
    
    return 0;
}

 

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!