SuissoS Posted October 9, 2013 at 02:47 PM Report #528187 Posted October 9, 2013 at 02:47 PM Eu estou a praticar exercicios para o meu teste de arquitectura de computadores esta semana e estou a fazer um exercicio em que pede para eu verificar se duas strings inseridas pelo utilizadores são iguais. Este é o codigo que fiz, mas qualquer que sejam as frases, diz que não são iguais. já estou à quase uma hora à procura do erro e não encontro. podem-me ajudar ? #include <stdio.h> int tamanhofrase(char s[]) { int i=0; while(s[i]!='\0') { i++; } return i; } int main() { char str1[30],str2[30]; int i,j,a=0,c=0; printf("Digite uma frase:"); fgets(str1,30,stdin); printf("Digite uma frase:"); fgets(str2,30,stdin); i=tamanhofrase(str1); j=tamanhofrase(str2); if(i==j) { while (a!=i || c==0) { if (str1[a]==str2[a]) { c=0; } else { c=1; } a++; } if(c==0) { printf("As frases são iguais\n"); } else { printf("As frases não são iguais\n"); } } else { printf("As frases não são iguais\n"); } return 0; }
KiNgPiTo Posted October 9, 2013 at 03:04 PM Report #528189 Posted October 9, 2013 at 03:04 PM (edited) Repara que no invariante do teu ciclo tens um OR, isto é, o ciclo executará enquanto pelo menos uma das condições for verdadeira. Se encontrares um caracter diferente, o c passa a 1 mas a outra condição mantém-se verdadeira e o ciclo continua. Passa esse || para && e deverá funcionar... EDIT: Repara que sempre que os caracteres são iguais, estás a definir o c para 0, mas não é necessário fazeres isso quando a condição é verdadeira mas sim quando é falsa (são diferentes). Edited October 9, 2013 at 03:08 PM by KiNgPiTo
HappyHippyHippo Posted October 9, 2013 at 04:12 PM Report #528205 Posted October 9, 2013 at 04:12 PM (edited) só em termos de conhecimento, ficas a saber que isso se resolve num par de linhas : #include <stdio.h> #include <string.h> int main() { char str1[30], str2[30]; printf("Digite uma frase:"); fflush(stdout); // se não tens o '\n' no printf, deverás usar o fflush de seguinda para prevenir coisas estranhas fgets(str1, 30, stdin); printf("Digite uma frase:"); fflush(stdout); // se não tens o '\n' no printf, deverás usar o fflush de seguinda para prevenir coisas estranhas fgets(str1, 30, stdin); if(strcmp(str1, str2) == 0) printf("As frases são iguais\n"); else printf("As frases não são iguais\n"); return 0; } claro que duvido que tenha sido a intenção do professor de resolver o problema desta forma ... ----- agora o teu código : #include <stdio.h> /* COMPLETAMENTE DESNECESSÀRIO !!! * int tamanhofrase(char s[]) { * int i=0; * while(s[i]!='\0') { * i++; * } * return i; * } */ int main() { char str1[30],str2[30]; int i; printf("Digite uma frase:"); fflush(stdout); fgets(str1,30,stdin); printf("Digite uma frase:"); fflush(stdout); fgets(str2,30,stdin); /* COMPLETAMENTE DESNECESSÀRIO !!! * i=tamanhofrase(str1); * j=tamanhofrase(str2); */ /* * if(i==j) { // comparação de tamanhos desnecessária */ i = 0; while (str1[i] != 0 && // enquanto estiveres a comparar caracteres da string str1[i] == str2[i]) /*(a!=i || c==0)*/ { // e os caracteres forem iguais /* código completamente desnecessário * if (str1[a] == str2[a]) { * c=0; * } else { * c=1; * } */ i++; // incrementas os indice dos caracteres a serem avaliados } if (str1[i] == 0 && str2[i] == 0) /*(c==0)*/ { // basta verificar se chegaste ao fim das duas strings printf("As frases são iguais\n"); } else { printf("As frases não são iguais\n"); } /* else do primeiro if - desnecessário * } else { * printf("As frases não são iguais\n"); * } */ return 0; } como vês, complicaste o que era simples edit : pequena correcção no código Edited October 9, 2013 at 04:22 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
SuissoS Posted October 9, 2013 at 07:44 PM Author Report #528246 Posted October 9, 2013 at 07:44 PM Trocando o II pelo && já deu. Mas obrigado por me mostrares uma forma mais simples de resolver. Assim para a próxima vez que me surgir algo do genero ja faço da tua forma.
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