Jump to content
Nyde

[Duvida]Verificação de strings

Recommended Posts

Nyde

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");
}

j01t.png

Edited by pmg
code tags com GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Nyde

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.

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
Nyde

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
KTachyon

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

Share this post


Link to post
Share on other sites
Nyde

Muito obrigado pelo esclarecimento KTachyon, graças a isso consegui resolver o meu problema e tirar a minha dúvida.

Cumps!

Share this post


Link to post
Share on other sites
Rui Carlos

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 :)

Share this post


Link to post
Share on other sites

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.