Ir para o conteúdo
Evenilink

Break / Continue - Problema no programa

Mensagens Recomendadas

Evenilink

Boas! :D

Estava a tentar "fazer" um programa, só que o compilador está sempre a emitir um Warning...

O que tenho de fazer é o seguinte:

"Escreva um programa que solicite o utilizador um número. Em seguida escreve todos os números inteiros a partir desse número excepto os múltiplos de 3. Quando encontrar o primeiro múltiplo de 10 termina a execução."

Aqui está o código que fiz:

#include <stdio.h>
main()
{
     int num, i;

     printf("Introduza um numero: ", num);
     scanf("%d", &num);
     for (i=num; ; i++);
         {
               if (i%10 == 0)
                  break;
               else
               if (i%3 == 0)  
                  continue;
               printf("%d", i);
         }

     getchar();
     getchar();
}

Está sempre a dar erro no Break e no Continue. O que estou a fazer mal?

Desculpem se o erro é de principiante, estou mesmo a começar com isto! :D

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Estás a ler o Damas, portanto.

Primeiro que nada, declara bem o main, não é como está no livro:

int main(void) {
  /* programa */
  return 0;
}

De seguida, leste bem todos os warnings? Eles não são um texto aleatório. Repara:

- Porque estás a fazer printf de num? Nem sequer tens um argumento na string para receber num, daí o warning:

prog.c:6:7: warning: too many arguments for format [-Wformat-extra-args]
      printf("Introduza um numero: ", num);
      ^

- Porquê dois getchar?

- De seguida, tens um ; após o for, e não devias estar lá nenhum. Daí estes erros:

prog.c:11:20: error: break statement not within loop or switch
                   break;
                   ^
prog.c:14:20: error: continue statement not within a loop
                   continue;
                   ^

O compilador dá-nos informação vital ;)


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

o num no primeiro printf nao esta a fazer nada.

Falta-te a condicao no for.

- Porquê dois getchar?

E' por causa do buffer, e' a maneira mais facil e simples de para a aplicacao, o primeiro getchar() apanha o Enter do buffer e o segundo fica 'a espera.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Evenilink

Oh realmente tenho um ; depois do "for"... Estava tão focado no Break e Continue que nem procurei outros erros.

Sim estou a ler o Damas! Pedi-o ao meu primo, assim quando for para a Universidade tenho pelo menos algumas bases.

E' por causa do buffer, e' a maneira mais facil e simples de para a aplicacao, o primeiro getchar() apanha o Enter do buffer e o segundo fica 'a espera.

É a única maneira que descobri para fazer parar o programa, no livro não diz nada sobre isso.

Primeiro que nada, declara bem o main, não é como está no livro:

int main(void) {
  /* programa */
  return 0;
}

Isso não sabia, ainda não me foi introduzido o "void", só uma pequena referência!

Mas desculpem lá o erro estúpido, e obrigado! :D

Editado por Evenilink

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Isso não sabia, ainda não me foi introduzido o "void", só uma pequena referência!

Mas desculpem lá o erro estúpido, e obrigado! :D

então ficas a saber (só para referência) que a chamada completa do main é :

int main(int argc, char ** argv) {
 return 0;
}

mas ficas bem servido com a solução anterior porque não vais usar esses argumentos tão cedo.

eu não faço ideia o porque do raio do break e do continue:

#include <stdio.h>

int main(int argc, char ** argv)
{
 int num, i;

 printf("Introduza um numero: "/*, num */); // porque razão estás a dar a variável "num" à função ?
 fflush(stdout); // não vale a pena saberes porque, basta saber que se o printf não tem o '\n', o melhor é ter isso logo a seguir
 scanf("%d", &num);

 for (i = num;     // inicialização
      i % 10 == 0; // condição de paragem (verificada antes de todas as execuções do ciclo, mesmo a primeira)
      i++);        // incremento do ciclo
 {
    if (i%3 != 0)
      printf("%d\n", i);
 }

 // getchar ?? nop, usa a consola
 return 0;
}

Editado por HappyHippyHippo
  • Voto 1

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pwseo

Só para referência (também), podemos escrever a função main com ou sem argumentos -- uma forma não é mais completa ou correcta que a outra. O standard diz especificamente que devemos utilizar uma de duas formas (ou equivalente):

int main(void) { ... }
int main(int argc, char *argv[]) { ... }

A questão do return 0 no final também tem as suas nuances: em C99 é opcional. De qualquer modo, faz sempre sentido colocá-lo explicitamente seja em que standard for, até porque a própria declaração indica que a função devolve um int.

De resto... está na altura de começar a ler os warnings com mais atenção :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

eu não faço ideia o porque do raio do break e do continue:

Sem dúvida que a tua solução é muito melhor e também seria a minha forma de resolver o exercício. Mas acho que este está inserido na parte que fala dos Continue e Break, pelo que é normal o aprendiz se sentir "inspirado" a usá-los :P


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.