Strcmp() não funciona ?? [RESOLVIDO]

1. Strcmp() não funciona ?? [RESOLVIDO]

Victocha
victocha

(usa Ubuntu)

Enviado em 06/04/2012 - 15:11h

Não é de hoje que eu venho postando tantos problemas aparentemente bestas aqui no fórum,é que alguns dias atrás baixei uma apostila de exercícios em C e meu intuito é terminar de resolver tudo que tiver de problema nela...

Mas a apostila destina-se a programadores do janelas,pois ela foca em bibliotecas como windows.h e conio em varios trechos.

Já no 7º exercício me dei mal com a função strcmp()

Não consigo localizar o erro neste código, nem o GCC pelo que vi =D.

A questão é que o gcc compila,mas o programa não compara corretamente as strings, e nem obedece o laço infinito, só funcionando uma vez.

// Comparação de strings através da função strcmp()

#include <stdio.h>
#include <string.h>

int main(void){

int infi=1;
int cont;
char digitado[2];


while(infi==1){


printf("Digite a senha para ter acesso aos dados do governo Americano *-* \n\n");

printf("--------->>>>>> ");

fgets(digitado,2,stdin);

if(strcmp(digitado,"nada")==0){

printf("\n\nSENHA CORRETA!,ACESSO LIBERADO\n\n");

}


else{

printf("\n\nSENHA DESCONHECIDA!\n\n");
}








}

return(0);

}







Que triste não? Mas então...se a vida é assim nada posso fazer, a não ser pedir ajuda.

Abraços e feliz páscoa.



  


2. MELHOR RESPOSTA

???
gokernel

(usa Linux Mint)

Enviado em 06/04/2012 - 18:30h


Antes estava no Smart Phone e nao podia testar ...

Tanta assim:



#include <stdio.h>
#include <string.h>

int main(void)
{
int len;
int infi=1;
char digitado[256];

while(infi==1)
{
printf("Digite a senha para ter acesso aos dados do governo Americano *-* \n\n");

printf("--------->>>>>> ");

scanf("%s", digitado);

printf("VOCE DIGITOU: (%s)\n", digitado); //so para conferir

if ( !strcmp(digitado,"nada") )
{
printf("\n\nSENHA CORRETA!,ACESSO LIBERADO\n\n");
}
else
{
printf("\n\nSENHA DESCONHECIDA!\n\n");
}
}

return 0;
}





3. Re: Strcmp() não funciona ?? [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 06/04/2012 - 15:39h

if (strcmp(digitado,"nada")==0)
ERRO: char digitado[2], tem apenas espaço para 2 letras e vc compara com 4 letras("nada").

TENTE ASSIM:
char digitado[20];
e
fgets (digitado, 18, stdin);



4. Re: Strcmp() não funciona ?? [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 06/04/2012 - 16:02h

Boa tarde.

Além disso, lembre-se de limpar o buffer antes de ler qualquer string.

Para fazer isso, utilize a função "__fpurge".

Exemplo:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int nome[20];

printf("\nDigite o nome.: ");
__fpurge(stdin);
fgets(nome, 20, stdin);
printf("\nSeja bem-vindo(a) %s", nome);

return(0);
}




5. Re: Strcmp() não funciona ?? [RESOLVIDO]

Victocha
victocha

(usa Ubuntu)

Enviado em 06/04/2012 - 16:11h

Então... como eu sou burro! mas peraí... eu arrumei o tamanho do vetor but it dont work!

O laço infinito agora funciona divinamente mas o strcmp não compara coisa alguma,eo programa só retorna

SENHA DESCONHECIDA


Vlw pela atenção


6. Re: Strcmp() não funciona ?? [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 06/04/2012 - 16:43h

victocha escreveu:

Então... como eu sou burro! mas peraí... eu arrumei o tamanho do vetor but it dont work!

O laço infinito agora funciona divinamente mas o strcmp não compara coisa alguma,eo programa só retorna

SENHA DESCONHECIDA


Vlw pela atenção


Olá.

Esse erro está ocorrendo porque você deve limpar o buffer, que está sujo. Você leu o meu post acima, amigo? Nele explico como solucionar o referido problema.

Até mais.



7. Re: Strcmp() não funciona ?? [RESOLVIDO]

Victocha
victocha

(usa Ubuntu)

Enviado em 06/04/2012 - 17:04h

Poxa vida,me desculpa por não ter dado tanta atenção ao seu post,mas enfim, eu limpei o buffer e a desgraça ainda não funciona!



8. Re: Strcmp() não funciona ?? [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 06/04/2012 - 18:07h

Olá.

Segue o código corrigido. Por favor, cole-o em sua IDE ou editor de textos e salve o arquivo. Depois compile-o e poste o resultado.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
int infi=1;
char digitado[20];

while(infi==1)
{
printf("Digite a senha para ter acesso aos dados do governo Americano *-* \n\n");

printf("--------->>>>>> ");

__fpurge(stdin);

fgets(digitado, 18, stdin);

if(strcmp(digitado,"nada")==0)
{
printf("\n\nSENHA CORRETA!,ACESSO LIBERADO\n\n");

}

else
{
printf("\n\nSENHA DESCONHECIDA!\n\n");
}


}

return(0);

}


Até mais.


9. Re: Strcmp() não funciona ?? [RESOLVIDO]

Victocha
victocha

(usa Ubuntu)

Enviado em 06/04/2012 - 22:54h

Aee!! muito obrigado gokernel, funcionou como eu queria!

Vlw hawk tbm!


Agora só para finalizar,porque não se usa o "&" para alocar?

Se eu compilar com o:

scanf("%s",&digitado);


O compilador retorna um erro tratando o & como um operador binário. Mas porém,muitos anos atrás,quando eu ainda era iludido, o "&" rodava no JANELAS, e era até necessário colocá-lo para o programa funcionar.

Isto exclusividade do linux?

Muito estranho.




10. Re: Strcmp() não funciona ?? [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 07/04/2012 - 09:26h

Isso ocorreu por que ele inseriu a biblioteca string.h. Mas o normal sem essa biblioteca seria mesmo utilizar o &. Só que para pegar um string, o scanf não funcionaria, teria que usar o gets(digitado);


11. Re: Strcmp() não funciona ?? [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 07/04/2012 - 09:57h

No windows usando o compilador GCC(MingW) o protótipo é definido deste modo:
------------------------------------------------

_CRTIMP int __cdecl scanf (const char*, ...);

RESUMIDO:
int scanf (const char*, ...);
------------------------------------------------

Compilei assim e o GCC não informou nada de WARNING( perigo ):
scanf("%s", digitado);

E compilei desta forma também e o GCC informou WARNING( perigo ):
scanf("%s", &digitado);

Ambas funcionaram mas sempre use o que o protótipo indica para usar:
--------------------------------------------------------

int scanf (const char*, ...);

--------------------------------------------------------


E se você obteve uma resposta satisfatória para sua dúvida, se quiser marque o tópico como resolvido e se preferir escolha a melhor resposta.

Abraço !!!







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts