nith_head 0 Denunciar post Postado Setembro 30, 2005 Ola a todos. Se alguem puder me ajudar, queria saber o erro de logica do codigo seguinte, pois o compilador nao acusa nenhum erro: /* Programa que requere dois numeros, soma-os e retorna o quadrado do resultado da soma caso a resposta do usuario seja s(de sim).*/1 main ( )2 {3 int soma, x, y, z;4 char resp; 56 printf ("Digite x: ");7 scanf ("%d", &x);8 printf ("Digite y: ");9 scanf ("%d", &y); 10 12 soma= 0; 11 soma = x+y;12 z = soma;13 printf ("Soma= %d\n", soma);14 printf ("Deseja obter o quadrado do resultado da soma?[s/n] \n");15 scanf ("%c", &resp);16 17 if (resp == 'n')18 printf("Fim do programa!");19 else20 if (resp == 's')21 printf ("Quadrado= %d.", z*z);22 }OBS: A numeração indica as linhas. O programa executa corretamente até a linha 14. Então em vez de esperar a entrada de dado do tipo caracter(%c) na linha 15 ele acaba. Queria saber porque o SCANF() da linha 15 não executa. Agradeço qualquer ajuda. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Uso o sistema operacional Slackware 10.2(Linux) e compilador gcc 3.3.6. Compartilhar este post Link para o post Compartilhar em outros sites
Higor_Owen 0 Denunciar post Postado Outubro 1, 2005 Cara essa tua linha 3 onde diz o seguinte int soma=0, x, y, z;ta muito confusa o ideal é você declará-las no inicio, e depois colocar o valor de cada, dependendo do compilador ele pode estar truncando ai e dando um possível erro não detectado. Faça assim int soma, x, y, z; soma=0;E se não me falhe a memória, em if (resp == 'n') seria if (resp == "n") mesmo sendo um char. Compartilhar este post Link para o post Compartilhar em outros sites
nith_head 0 Denunciar post Postado Outubro 1, 2005 Ola Higor. Bom, fiz o que voce disse e ainda não está funcionando como eu quero ,ou seja, esperar o usuario digitar s(para sim) ou n(para não), que está na linha 15. scanf("%c", &resp); Coloquei soma=0; em outra linha. Na sentença if(resp == 'n') substitui aspas simples por aspas duplas e o compilador deu o seguinte aviso: teste2.c:22: warning: comparison between pointer and integer O compilador que uso é o gcc 3.12 do Linux. Compartilhar este post Link para o post Compartilhar em outros sites
Higor_Owen 0 Denunciar post Postado Outubro 2, 2005 Muito estranho, tentei fazer o resp receber outros tipos, como string ou int e continua o mesmo problema. Quando chega na linha 14 o programa acaba do nada! Vo tentar outras formas, mas ta estranho esse problema! Compartilhar este post Link para o post Compartilhar em outros sites
nith_head 0 Denunciar post Postado Outubro 2, 2005 Pois é cara. Quebrei a cabeça aqui e não encontrei nenhum erro, como é que podee! Vou quebrar a cabeça mais um pouco, não é possivel que esse problema não tenha solução! Usei um artificio com while mas não gostei. Ficou assim: 13 printf ("Soma= %d\n",z);14 while (resp != 't') {15 printf ("Deseja obter o quadrada do resultado?[s/n] \n");16 scanf ("%c",&resp);17 18 if (resp == 'n')19 printf("Fim do programa!");20 if (resp == 's')22 printf ("Quadrado= %d.", z*z);23 if (resp == 't')24 break; 25 } Desse jeito ele pergunta, mas fica com loop infinito. Isso não é bom. Para sair é só apertar t.A proposito, meu compilador gcc é a versão 3.3.6 e não 3.12. Compartilhar este post Link para o post Compartilhar em outros sites
RenatoMejias 1 Denunciar post Postado Outubro 2, 2005 Apenas mude essa linha:scanf ("%c", &resp);porscanf ("%s", &resp);Só isso, eu testei e deu certo... Compartilhar este post Link para o post Compartilhar em outros sites
nith_head 0 Denunciar post Postado Outubro 2, 2005 Ola renato. Se eu tivesse que mudar para scanf("%s", &resp); teria que mudar varias coisas, começando pela declaração de repos, pois o tipo string é uma matriz. E este comando estaria errado, teria que ser: scanf("%s", resp) Ai o scanf leria o primeiro indice, ou seja, resp[0]. Só para confirmar testei aqui do jeito que voce disse e não retorna o quadrado direito. Em vez disso retorna sempre 0, para qualquer numero, nao sei se aí tambem. Ai testei tambem do meu jeito: scanf("%s", resp); , detalhe: sem declarar resp como matriz. Coloquei 2 para x e 4 para y. Ok, ele executou o scanf, mas na hora de retornar o quadrado ele diz: Falha de segmentação. Ainda não é a solução. Mesmo assim valeu pela dica. Compartilhar este post Link para o post Compartilhar em outros sites
nith_head 0 Denunciar post Postado Outubro 3, 2005 E ai galera! Resolvi o problema. Descobrir que ele só executa o scanf() se eu usar um while() com break para não ficar com loop infinito. Ficou assim: 15 while (1) /* Sempre verdadeiro */ {16 printf ("Deseja obter o quadrada do resultado?[s/n] ");17 scanf ("%c",&resp);1819 if (resp == 'n'){20 printf("Fim do programa!");21 break; } 22 else23 if (resp == 's'){24 printf ("Quadrado= %d.\n", z*z);25 break; }26 } Compartilhar este post Link para o post Compartilhar em outros sites
RenatoMejias 1 Denunciar post Postado Outubro 3, 2005 Então Nit Head, vou postar aqui o código inteiro, apenas modifiquei aquela linha, eu estou usando o Turbo C. Ele calcula perfeitamente o quadro e pregunta se você quer que mostre o quadrado. /* Testes */ main ( ) { int soma=0, x, y, z; char resp; clrscr(); printf ("Digite x: "); scanf ("%d", &x); printf ("Digite y: "); scanf ("%d", &y); soma = x+y; z = soma; printf ("Soma= %d\n", z); printf ("Deseja obter o quadrado do resultado da soma?[s/n] \n"); scanf ("%s", &resp); if (resp == 'n') printf("Fim do programa!"); else if (resp == 's') printf ("Quadrado= %d.", z*z); getch(); } Engraçado, nunca acho a o para colocar o fonte... Compartilhar este post Link para o post Compartilhar em outros sites
nith_head 0 Denunciar post Postado Outubro 3, 2005 Ué!, isso é muito estranho. No compilador que uso, gcc 3.3.6, ele não retorna o quadrado direito. Sempre dá zero. Deve ser porque são compiladores diferentes. Ah.Tive que tirar o getch() do final porque não consegui usar o getch do gcc. Afinal para que ele serve?Para inserir o texto em code basta delimita-lo com COCHETEcodeCOCHETE programa... COCHETE/codeCOCHETE, sendo que voce de substituir a palavra COCHETE pelo simbolo [ ]. Compartilhar este post Link para o post Compartilhar em outros sites
RenatoMejias 1 Denunciar post Postado Outubro 4, 2005 O getch(); serve para dar um "pause" no programa, pra ele não encerrar após a execção, senão você não consegue ver o resultado. É semelhante a um system("pause");. Entendeu??? Quanto a tag CODE, é que em outros fóruns que eu posto, tem um botão escrito CODE, ai é só clicar nele. rsrsrs Teste Compartilhar este post Link para o post Compartilhar em outros sites
Higor_Owen 0 Denunciar post Postado Outubro 4, 2005 Testei no dev c++ e funcionou perfeitamente os dois codigos fontes. Mas ainda nao entendi do pq do primeiro fonte ainda n funcionar, estranho! Compartilhar este post Link para o post Compartilhar em outros sites