Jump to content
Gabriele

Código de repetição While

Recommended Posts

Gabriele

Olá, eu estou tendo um problema com esse código. Eu não consegui notar onde ele tá erro (pois sou novata em programação), mas ele sempre pede um número e não faz o algoritmo novamente, apenas continua no loop da pergunta. Alguém pode me ajudar? Agradeço

#include <stdio.h>
#include <stdlib.h>
main()
{
    char ch;
      int num, i;
      i = 0;
      while (1){
      printf("Digite um numero. \n");
      scanf("%d", &num);
      while (i < 10)
      {
          i++;
          printf("\n %4d X %2d = %4d", num, i, i * num);
          }

      printf("\n\n\n");
}
     system("pause");
}


 

Share this post


Link to post
Share on other sites
Galo
59 minutos atrás, Gabriele disse:

Olá, eu estou tendo um problema com esse código. Eu não consegui notar onde ele tá erro (pois sou novata em programação), mas ele sempre pede um número e não faz o algoritmo novamente, apenas continua no loop da pergunta. Alguém pode me ajudar? Agradeço

 

#include <stdio.h>
#include <stdlib.h>
main()
{
    char ch;
      int num, i;
      i = 0;
      while (1){
      printf("Digite um numero. \n");
      scanf("%d", &num);
      while (i < 10)
      {
          i++;
          printf("\n %4d X %2d = %4d", num, i, i * num);
          }

      printf("\n\n\n");
}
     system("pause");
}
 

Boas, estive a testar o teu código e está tudo a funcionar correctamente 😕

Já agora, o primeiro ciclo não é necessário.

Edited by Galo

Share this post


Link to post
Share on other sites
antseq
1 hora atrás, Gabriele disse:

Olá, eu estou tendo um problema com esse código. Eu não consegui notar onde ele tá erro (pois sou novata em programação), mas ele sempre pede um número e não faz o algoritmo novamente, apenas continua no loop da pergunta. Alguém pode me ajudar? Agradeço

Se quer que volte a fazer o algoritmo novamente, a instrução "i = 0;" tem de passar para dentro do primeiro "while" (de forma a fazer RESET do i=0), senão o "i" já terá uma valor maior/igual a 10 e não voltará a fazer/repetir o algoritmo para o novo valor lido.

 while (1){
 	i = 0;
	...
}

* Este "while(1)" deixará o programa a repetir o algoritmo em loop "infinito"

* Como o "algoritmo" parece ter um número de "passos" fixo (0..9) e pré-determinado, no segundo "while" poderia ter usado um "for(int i=0;i<10;i++)"

Edited by antseq
corrigir texto
  • Vote 1

Share this post


Link to post
Share on other sites
Gabriele
16 horas atrás, antseq disse:

Se quer que volte a fazer o algoritmo novamente, a instrução "i = 0;" tem de passar para dentro do primeiro "while" (de forma a fazer RESET do i=0), senão o "i" já terá uma valor maior/igual a 10 e não voltará a fazer/repetir o algoritmo para o novo valor lido.


 while (1){
 	i = 0;
	...
}

* Este "while(1)" deixará o programa a repetir o algoritmo em loop "infinito"

* Como o "algoritmo" parece ter um número de "passos" fixo (0..9) e pré-determinado, no segundo "while" poderia ter usado um "for(int i=0;i<10;i++)"

Obrigada, me ajudou muito. Eu acabei testando o for no código, infelizmente ele não mostrava todos resultados da tábuada (apenas uns 4 ou 5, não lembro direito).

No final, o código ficou assim: 

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
main(){
      int num, i;
      char ch, c;
      c = 'S';
      while(toupper(c)=='S')
      {
          i = 0;
      printf("Digite um numero: \n");
      scanf("%d", &num);
      while (i < 10)
          {
          i++;
          printf("\n %4d X %2d = %4d", num, i, i * num);
          }
           printf("\n\n\n");
          printf("Deseja continuar (S/N)? \n");
           c=getch();
        }
}

 

Share this post


Link to post
Share on other sites
Gabriele
14 horas atrás, Galo disse:

Boas, estive a testar o teu código e está tudo a funcionar correctamente 😕

Já agora, o primeiro ciclo não é necessário.

É que abaixo da pergunta, ele não mostrava a tábuada (pelo menos no meu), e fica só nesse loop de perguntar o número. Porém, após alguns ajustes, ele funcionou :D

Edited by Gabriele
escrevi errado

Share this post


Link to post
Share on other sites
antseq
51 minutos atrás, Gabriele disse:

Obrigada, me ajudou muito. Eu acabei testando o for no código, infelizmente ele não mostrava todos resultados da tábuada (apenas uns 4 ou 5, não lembro direito).

Se optar, pelo "for" que já faz o incremento na sua definição ( ; ;i++) deve remover o outro "i++" de dentro do ciclo... senão como diz... mostra apenas metade dos resultados (de cada vez que corre o ciclo o "i" incrementa 2 e portanto terá metade dos resultados).

cps.

  • Vote 1

Share this post


Link to post
Share on other sites
Gabriele
1 hora atrás, antseq disse:

Se optar, pelo "for" que já faz o incremento na sua definição ( ; ;i++) deve remover o outro "i++" de dentro do ciclo... senão como diz... mostra apenas metade dos resultados (de cada vez que corre o ciclo o "i" incrementa 2 e portanto terá metade dos resultados).

cps.

Entendi... Obrigada novamente :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.