Sion Posted January 11, 2008 at 03:01 PM Report Share #159238 Posted January 11, 2008 at 03:01 PM Boas tou a fazer um programa simples com a estrura IF, mas o meu programa quando chega ao Scan do char ignora-o e passa a frente se puderem ajudar agradecia! š #include <stdio.h> int main() { int a,b,c,d,e,f; char resposta; printf("Introduza o primeiro numero\n"); scanf("%d",&a); /*Leitura do primeiro num*/ printf("Introduza o segundo numero\n"); scanf("%d",&b); /*Leitura do segundo num*/ c=a+b; d=a-b; e=a*b; f=a/b; printf("Prima 's' se quizer ver os resultaos\n"); scanf("%c",&resposta); if ( resposta == 's') /*Confirmacao se o utilizador que ver os resultados*/ { printf("O resultado da soma e %d\n O Da divisao e %d\n O da multiplicacao e %d\n O E da Divisao e %d\n",c,d,e,f); } else /*Caso o utilizador prima kkl coisa se nao o 's'*/ { printf("FIM"); /*FIM do programa!*/ } } Cumps. _________________Cenas pĆ”. Link to comment Share on other sites More sharing options...
greed Posted January 11, 2008 at 03:03 PM Report Share #159239 Posted January 11, 2008 at 03:03 PM Ou seja faz o printf do FIM correcto? Usa o ghesi para a proxima. -- @pcbo Link to comment Share on other sites More sharing options...
Sion Posted January 11, 2008 at 03:07 PM Author Report Share #159240 Posted January 11, 2008 at 03:07 PM ya.. eu queria que ele primeiro le-se o 's' ou outro e depois respondia o resultado ou FIM OK, vou ver como se usa o ghesi, ja n venho ao forum a algum tempo xP Alguma solucao :x? nao percebo porque que ele ignora _________________Cenas pĆ”. Link to comment Share on other sites More sharing options...
greed Posted January 11, 2008 at 03:23 PM Report Share #159243 Posted January 11, 2008 at 03:23 PM Então suponho que ele não estÔ a ler o s e estÔ a imprimir FIM para o ecran. Lê isto: http://www.gidnetwork.com/b-60.html -> pk nao deves usar scanf para ler char. Eu faria: char * resposta; scanf("%s",resposta); if(strcmp(resposta,"s") == 0) .... else .... -- @pcbo Link to comment Share on other sites More sharing options...
Warrior Posted January 11, 2008 at 04:24 PM Report Share #159255 Posted January 11, 2008 at 04:24 PM NĆ£o tem nada a ver com isso, e nĆ£o hĆ” nenhum problema em usar scanf para ler caracteres, especialmente nesta solução em que getchar nĆ£o resolve. Coloca um espaƧo antes do %c, ficando scanf(" %c",&resposta); O que estĆ” a acontecer Ć© que o scanf estĆ” a ler o \n inserido pelo utilizador no final da ultima resposta e que ficou no buffer de entrada (uma vez que só foi lido o nĆŗmero). O ' ' antes do %c obriga-o a ler um caracter que nĆ£o \n ' ' e \t. Como alternativa podes modificar o scanf da leitura do segundo numero para scanf("%d\n",&š ; forƧando-o assim a ler a mudanƧa de linha. Link to comment Share on other sites More sharing options...
Sion Posted January 11, 2008 at 07:27 PM Author Report Share #159283 Posted January 11, 2008 at 07:27 PM Muito obrigado š o espaco a frente do %c resolveu o problema _________________Cenas pĆ”. Link to comment Share on other sites More sharing options...
Sion Posted January 11, 2008 at 08:15 PM Author Report Share #159287 Posted January 11, 2008 at 08:15 PM desculpem o double post, mas como me surgiu outro problema queria aproveitar o topico, e nao consigo editar o meu problema estÔ na segunda fase do código quando comeca o ciclo com o do{, ele no fim valida se resposta = 's' || 'n', no entando mesmo que seja 's' ou 'n' ele volta ao ciclo e nunca saà dele :/ , nao percebo o que é que ta a falhar.. Código : #include <stdio.h> int main() { int a,b,c,d,e,f,; char resposta; printf("Introduza o primeiro numero\n"); scanf("%d",&a); /*Leitura do primeiro num*/ printf("Introduza o segundo numero\n"); scanf("%d",&b); /*Leitura do segundo num*/ c=a+b; d=a-b; e=a*b; f=a/b; do{ printf("Prima 's' se quizer ver os resultaos\n"); scanf(" %c",&resposta); if ( resposta == 's') /*Confirmacao se o utilizador que ver os resultados*/ { printf("O resultado da soma e %d\n O Da divisao e %d\n O da multiplicacao e %d\n O E da Divisao e %d\n",c,d,e,f); } if ( resposta == 'n') { printf("FIM\n"); } }while (resposta != 's' || 'n'); } Cumps _________________Cenas pÔ. Link to comment Share on other sites More sharing options...
Betovsky Posted January 11, 2008 at 08:30 PM Report Share #159293 Posted January 11, 2008 at 08:30 PM }while (resposta != 's' || 'n'); Teres isso Ć© o mesmo que teres }while ('n'); que Ć© serĆ” sempre verdadeiro. O que queres Ć© }while (resposta != 's' && resposta != 'n'); "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
Sion Posted January 11, 2008 at 09:07 PM Author Report Share #159299 Posted January 11, 2008 at 09:07 PM Axo que isso resolve o meu problema, mas agora da-me outro esqusitio na compilação, com o Dev , o programa fecha logo a seguir à leitura da varÔvel, nao importa que eu ponha system("pause"), ou gethcar();, com o Visual studio dame erro na compilacao , o sistema nao consegue localizar o ficheiro indicado (programa.exe) :S! alguma idea :/? _________________Cenas pÔ. Link to comment Share on other sites More sharing options...
greed Posted January 11, 2008 at 09:35 PM Report Share #159306 Posted January 11, 2008 at 09:35 PM linux. -- @pcbo Link to comment Share on other sites More sharing options...
Sion Posted January 11, 2008 at 09:40 PM Author Report Share #159311 Posted January 11, 2008 at 09:40 PM podes ser mais especifico? :s EDIT: depois de muitoĀ e muitoĀ consegui resolver š _________________Cenas pĆ”. Link to comment Share on other sites More sharing options...
Black Tiger III Posted January 13, 2008 at 05:24 PM Report Share #159626 Posted January 13, 2008 at 05:24 PM linux. LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL pĆ” desculpem se for considerado spam mas nĆ£o se poe linux, escreve-se Solução para a paz mundial, e a fome em Ćfrica... Ćrale MI RAZA, MY BLOOD HOLMES BELONGS TO ME ĆSE... EENNNGGGGEEEENNNNNNNHHHHAAAARRRRRIIIIIIIIIIAAAAAAAINFORMATICASISTEMAS.... Link to comment Share on other sites More sharing options...
TheDark Posted January 13, 2008 at 06:55 PM Report Share #159635 Posted January 13, 2008 at 06:55 PM Eu faria: char * resposta; scanf("%s",resposta); if(strcmp(resposta,"s") == 0) .... else .... Não alocaste espaço para a resposta... Desaparecido. Link to comment Share on other sites More sharing options...
greed Posted January 14, 2008 at 02:33 PM Report Share #159763 Posted January 14, 2008 at 02:33 PM Em 13/01/2008 Ć s 18:24, Black Tiger III disse: LOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOL pĆ” desculpem se for considerado spam mas nĆ£o se poe linux, escreve-se Solução para a paz mundial, e a fome em Ćfrica... NĆ£o curto š openSuse rocks -- @pcbo Link to comment Share on other sites More sharing options...
Black Tiger III Posted January 14, 2008 at 02:41 PM Report Share #159766 Posted January 14, 2008 at 02:41 PM [offtopic] LOL, seja, apenas mudas a URL... [/offtopic] sorry offtopic Ćrale MI RAZA, MY BLOOD HOLMES BELONGS TO ME ĆSE... EENNNGGGGEEEENNNNNNNHHHHAAAARRRRRIIIIIIIIIIAAAAAAAINFORMATICASISTEMAS.... Link to comment Share on other sites More sharing options...
greed Posted January 14, 2008 at 02:50 PM Report Share #159768 Posted January 14, 2008 at 02:50 PM Em 13/01/2008 às 19:55, TheDark disse: Não alocaste espaço para a resposta... peço imensas desculpas! a declaração da variavel resposta passa a ser: char * resposta = (char *) malloc(sizeof(char)); p.s: nao esquecer de fzer include da stdlib para nao terem warnings. -- @pcbo Link to comment Share on other sites More sharing options...
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