Evenilink Posted September 5, 2013 at 10:06 PM Report #523561 Posted September 5, 2013 at 10:06 PM (edited) Boas! 😄 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! 😄 Edited September 5, 2013 at 10:13 PM by thoga31 Tags code + GeSHi
nelsonr Posted September 5, 2013 at 10:13 PM Report #523562 Posted September 5, 2013 at 10:13 PM Tens um ; depois do for
thoga31 Posted September 5, 2013 at 10:19 PM Report #523563 Posted September 5, 2013 at 10:19 PM 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!
pikax Posted September 5, 2013 at 11:49 PM Report #523578 Posted September 5, 2013 at 11:49 PM 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."
Evenilink Posted September 6, 2013 at 12:23 AM Author Report #523580 Posted September 6, 2013 at 12:23 AM (edited) 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! 😄 Edited September 6, 2013 at 12:23 AM by Evenilink
HappyHippyHippo Posted September 6, 2013 at 05:54 AM Report #523586 Posted September 6, 2013 at 05:54 AM (edited) 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! 😄 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; } Edited September 6, 2013 at 05:55 AM by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pwseo Posted September 6, 2013 at 04:33 PM Report #523687 Posted September 6, 2013 at 04:33 PM 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 🙂
thoga31 Posted September 6, 2013 at 04:41 PM Report #523691 Posted September 6, 2013 at 04:41 PM 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 😛 Knowledge is free!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now