Nyde Posted June 14, 2013 at 07:52 AM Report #512816 Posted June 14, 2013 at 07:52 AM Tenho o seguinte programa que cria utilizadores e passwords, mas quando vou a fazer verificação ele vai me repetir informação, por exemplo pesquiso pelo utilizador1, ele mostra o utlizador1 e a sua password, mas depois vai mostrar os outros sitios onde não existe o utilizador1, dizendo não existe informação. #include <stdio.h> #include <stdlib.h> #include <string.h> struct utilizador { char username[50]; char password[50]; }; main() { struct utilizador info[20]; int i; int caracter; char nome[50]; FILE *fp; for(i=0; i<3; i++) { printf("\nCrie o username %d: ", i+1); scanf(" %[^\n]s", info[i].username); printf("\nCrie a password do utilizador %d: ", i+1); scanf(" %[^\n]s", info[i].password); } fp = fopen("password.txt", "w"); for(i=0; i<3; i++) { fprintf(fp,"\nUtilizador: %s",info[i].username); fprintf(fp,"\nPassword: %s",info[i].password); } system("cls"); fclose(fp); fp = fopen("password.txt", "r"); while ((caracter=fgetc(fp)) != EOF) { putchar(caracter); } fclose(fp); printf("\n\n"); printf("\nIntroduza o username: "); scanf(" %[^\n]s", nome); for(i=0; i<3; i++) { if(strcmp(info[i].username, nome)==0) printf("\nUsername: %s password: %s", info[i].username, info[i].password); else printf("\nNao existe informacao."); } printf("\n\n"); system("pause"); } http://img37.imageshack.us/img37/2324/j01t.png
HappyHippyHippo Posted June 14, 2013 at 08:15 AM Report #512824 Posted June 14, 2013 at 08:15 AM primeiro, faz este teste para perceberes o que se está a passar: printf("\n\n"); printf("\nIntroduza o username: "); scanf(" %[^\n]s", nome); printf("O nome a pesquisar : -%s-\n", nome); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Nyde Posted June 14, 2013 at 08:33 AM Author Report #512830 Posted June 14, 2013 at 08:33 AM Eu sei o que se está a passar mas o meu problema é como posso tirar dali o "não existe informação" nas duas posições a seguir, eu sei que se tirar o for, ele dá erro, mas com o for funciona bem.
HappyHippyHippo Posted June 14, 2013 at 08:47 AM Report #512833 Posted June 14, 2013 at 08:47 AM for(i=0; i<3; i++) { if(strcmp(info[i].username, nome)==0) printf("\nUsername: %s password: %s", info[i].username, info[i].password); // else // printf("\nNao existe informacao."); } tira-me só uma pequena dúvida : não foste tu que fizeste esse código pois não ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Nyde Posted June 15, 2013 at 07:55 AM Author Report #513081 Posted June 15, 2013 at 07:55 AM Fiz este código para um exercício de programação, sou aluno de 18-19 à disciplina, mas quando tenho uma dúvida já há quase 2 módulos, que nem a stora sabe-me resolver vim a este fórum por aconselho de um amigo. Se quiseres explico-te o código linha a linha, e o não existe ali informação está caso pesquisem por um utilizador que não exista na suposta "base de dados". Mas deixe estar pode apagar a dúvida do fórum e escuso de cá voltar, se é para partimos do ponto que ando a "roubar códigos" mais vale não voltar cá.
HappyHippyHippo Posted June 15, 2013 at 09:02 AM Report #513083 Posted June 15, 2013 at 09:02 AM eu fiz uma pergunta, bastava responder sim ou não ... estás a dizer que a tua professora não sabia que a razão de que aparecia a mensagem "Nao existe informacao." era no else do if interno do for ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
KTachyon Posted June 15, 2013 at 04:00 PM Report #513114 Posted June 15, 2013 at 04:00 PM (edited) O que o HappyHippyHippo está a dizer é que o ciclo for corre 3x porque tu não o mandas sair. Logo aparecem 3 outputs, um do if e outros dois do else. Claramente que não é o comportamento que estás à espera. int flag = 0, i; for (i = 0 i < 3; i++) if(strcmp(info[i].username, nome)==0) { flag = 1; printf("\nUsername: %s password: %s", info[i].username, info[i].password); break; } if (flag == 0) printf("\nNao existe informacao."); Edited June 15, 2013 at 04:01 PM by KTachyon “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
Nyde Posted June 15, 2013 at 11:04 PM Author Report #513208 Posted June 15, 2013 at 11:04 PM Muito obrigado pelo esclarecimento KTachyon, graças a isso consegui resolver o meu problema e tirar a minha dúvida. Cumps!
Rui Carlos Posted June 16, 2013 at 02:13 PM Report #513243 Posted June 16, 2013 at 02:13 PM O que o HappyHippyHippo está a dizer é que o ciclo for corre 3x porque tu não o mandas sair. Logo aparecem 3 outputs, um do if e outros dois do else. Claramente que não é o comportamento que estás à espera. int flag = 0, i; for (i = 0 i < 3; i++) if(strcmp(info[i].username, nome)==0) { flag = 1; printf("\nUsername: %s password: %s", info[i].username, info[i].password); break; } if (flag == 0) printf("\nNao existe informacao."); Com a variável flag não havia mesmo necessidade de usar o break 🙂 Rui Carlos Gonçalves
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