Jump to content

Recommended Posts

Posted

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

Posted

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.

Posted
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
Posted

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á.

Posted (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 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

Posted

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 🙂

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.