Loop do...while [RESOLVIDO]

1. Loop do...while [RESOLVIDO]

Lucas jose Pereia de Araujo
LucasJPA

(usa Debian)

Enviado em 24/09/2017 - 02:13h

Caros nesse codigo estou lendo os elementos de um vetor com o loop do ... while

#include <stdio.h>

#define MAX 50

int main() {

int vetor[MAX];
int i;
int tamanho;

printf("\nDigite os numeros: \n");

i = -1;
tamanho = 0;

do {

scanf("%d", &vetor[i]);
i++;
tamanho++;

}while(vetor[i] != 0 || tamanho < MAX);

for(i = 0; i < tamanho; i++) {

printf("%d ", vetor[i]);
}

printf("\n");

return 0;
}


Nesse caso o loop deveria parar quando o usuario digitasse 0, mas não e isso que acontece. Poderiam me dizer o por que e como resolver ?

Obrigado desde ja.


  


2. Re: Loop do...while [RESOLVIDO]

Raphael Henrique
Raphael_Henrique

(usa XUbuntu)

Enviado em 24/09/2017 - 15:55h

o problema de não estar parando quando digita 0 é a condição de parada, pois com esse or, ainda que vc digite 0, a segunda condição ainda pode estar sendo satisfeita (o tamanho do vetor ainda é menor que MAX). Consegui corrigir isso adicionando a verificação de parada antes de qualquer operação do loop:


do {
if(tamanho >= MAX){break;}
i++;
scanf("%d", &vetor[i]);
tamanho++;
}while((vetor[i] != 0));



o incremento da posição do vetor deve também ser executada antes do scanf, pois da forma como estava, ele gravava o valor na posição i, incrementava e então verificava a condição na posição i+1, e não na posição i.


3. Re: Loop do...while [RESOLVIDO]

Lucas jose Pereia de Araujo
LucasJPA

(usa Debian)

Enviado em 24/09/2017 - 22:01h

Fiz desse jeito, como voce disse, mas ainda persiste o erro. o programa fica lendo os numeros, eu acho, e ao entrar com o 0, o programa não encerra.


4. Re: Loop do...while

Raphael Henrique
Raphael_Henrique

(usa XUbuntu)

Enviado em 24/09/2017 - 23:02h

LucasJPA escreveu:

Fiz desse jeito, como voce disse, mas ainda persiste o erro. o programa fica lendo os numeros, eu acho, e ao entrar com o 0, o programa não encerra.


esse aqui é o código completo:


#include <stdio.h>

#define MAX 50

int main() {

int vetor[MAX];
int i;
int tamanho;

printf("\nDigite os numeros: \n");

i = -1;
tamanho = 0;

do {
if(tamanho >= MAX){break;}
i++;
scanf("%d", &vetor[i]);

tamanho++;

}while((vetor[i] != 0));

for(i = 0; i < tamanho; i++) {

printf("%d ", vetor[i]);
}
printf("\n");

return 0;
}


e esse um exemplo desse código acima rodando


Digite os numeros:
1
2
3
4
5
6
7
8
9
2
1
4
5
0
1 2 3 4 5 6 7 8 9 2 1 4 5 0

a última linha é o resultado impresso, note que o último número que inseri foi exatamente 0. Estou utilizando o gcc do linux pra compilar, e aqui está rodando perfeitamente... compare o meu código com o seu e veja se há discrepâncias. Se não houver, verifique se há algum erro retornado


5. Re: Loop do...while

Paulo Dias
p4ulodi4s

(usa XUbuntu)

Enviado em 24/09/2017 - 23:08h

LucasJPA escreveu:

Caros nesse codigo estou lendo os elementos de um vetor com o loop do ... while

#include <stdio.h>

#define MAX 50

int main() {

int vetor[MAX];
int i;
int tamanho;

printf("\nDigite os numeros: \n");

i = -1;
tamanho = 0;

do {

scanf("%d", &vetor[i]);
i++;
tamanho++;

}while(vetor[i] != 0 || tamanho < MAX);

for(i = 0; i < tamanho; i++) {

printf("%d ", vetor[i]);
}

printf("\n");

return 0;
}


Nesse caso o loop deveria parar quando o usuario digitasse 0, mas não e isso que acontece. Poderiam me dizer o por que e como resolver ?

Obrigado desde ja.


Oi.

A lógica do programa está equivocada. Porém, não é necessário utilizar um if com break...

O erro está na condição do do...while. Quando for escrever um loop, pense primeiro na condição de parada...

Para resolver, tente escrever a condição conforme essa afirmação: Você quer ler e armazenar números enquanto não for informado zero e tiver espaço no array.

Outra coisa, porquê i = -1; ?

Linux Professional Institute - LPIC-1
Novell Certified Linux Administrator - CLA
Oracle Certified Associate, Java SE Programmer - OCA

http://twitter.com/p4ulodi4s
http://www.prminformatica.com.br/


6. Re: Loop do...while [RESOLVIDO]

Lucas jose Pereia de Araujo
LucasJPA

(usa Debian)

Enviado em 25/09/2017 - 21:54h

Coloquei i = -1 para que quando ele fosse incementado, iniciasse no indice 0 mas vejo que não ha por que disso se eu o colocar no lugar certo do codigo.


7. 2 problemas

lucas
1lucas1

(usa Linux Mint)

Enviado em 24/10/2017 - 03:32h

encontrei 2 problemas o primeiro é que vc declarou o i como -1
i = -1; 

e o do salva depois acrescenta
do {

scanf("%d", &vetor[i]);

i++;
tamanho++;

}while(vetor[i] != 0 || tamanho < MAX);

ou seja ele vai salva o primeiro numero no vetor na posição -1 algo que está errado pois começa no [0] e nao no [-1] o outro problema que no do...while a verificação ocorre a pós a execução e quando vc coloca i++ dentro do do...while vc altera o valor do i antes da verificação ou seja se i vale 5 vc salva o i na posição 5 e acrescenta 1 em i que torna i=6 e no while vc verifica se na posição 6 é diferente de 0 ou seja coloque
vetor[i-1] != 0







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts