Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kelvin Dules

[Resolvido] Dor de Cabeça. ¬¬

Recommended Posts

Estou com problemas nessa parte do código:

 

 

//Sistema de Segurança®
//===== Patch 2.0 =====
//Adoção de Senha.
//-----------------------|

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>

//Voids dos Cases
void remover();
void cadastrar();
void pesquisar();
void editar();
void ajuda();
// ---------------------- Variáveis!!!
char defpass[50];
char defpass2[50];
char repet='s'; // Char de Repetição.
FILE *registro; // Variável de Arquivo. 
char st[50];
char st2[50];
char st3[50];
char id[50];
char stat[50];
char nficha[30];
char nficha2[30];
char strings;
char rank[50];
char sPass;
int abc;
int funcao;
int security;
int iAux;
int main(){ //MAIN

//Sistema de Segurança
do{
		  security = 0;		  
printf("Aguarde..."); _sleep(2000);
registro = fopen("Security/program_key.txt","r");
			if(!registro)
			 {
						  do{
						  system("cls");
						  printf("|______________________________________________|\n");		  //PARTE 1
						  printf("|=Seja bem vindo ao Sistema de Seguranca K.D.D.|\n\n\n");
						  printf("|______________________________________________|\n");
						  printf("|=Voce ainda nao possui uma senha definida,	|\n");
						  printf("|=Digite agora, sua senha:  ");
						  scanf("%s",&defpass);
						  printf("- Confirme sua senha: ");
						  scanf("%s",&defpass2);
						  printf("|______________________________________________|\n");
						  if(defpass == defpass2){
												 if(registro = fopen("Security/program_key.txt","w"))
												 fprintf(registro,"%s",defpass2);
												 fclose(registro);
												 printf("\n\nDefinicao de Senha Concluida!\n");
												 printf("Faça bom proveito do programa! =D");
												 _sleep(1500);
												 security=0;
												 }
													  else{
														   if(defpass!=defpass2)
													  printf("Voce digitou senhas diferentes, tente novamente!");
													  _sleep(1500);
													  security = 1;
													  }}while(security = 1);
													  }
													  
													  
						  
									 
if(security!= 1);
iAux = 0; 
system("color 2");
system("cls");
printf("==========================================\n");
printf("||	   K_D_D_   Security System	   ||\n");												 // PARTE 2
printf("------------------------------------------\n");
printf("Digite a senha de administracao!\n");
printf("\n\nSENHA ==>  ");
scanf("%s",&sPass);
printf("%s", sPass);
_sleep(1500);
if(registro = fopen("Security/program_key.txt","r")){
strings = getc(registro);
}
Beep(1000,80);
if (strings == sPass) printf(" ===> SENHA CORRETA #Acesso Liberado#");
else {
	 Beep(500,80); Beep(500,80);
	 printf(" ===> SENHA INCORRETA! #Acesso Negado#\n\n\n");
	 iAux =1;
	 system("pause");
	 }
	 }while(iAux == 1);
printf("\n\n\nCarregando...");
_sleep(1500);
//Menu*
do{
if (iAux!=1) {
system("cls");
system("color 4");
printf("\n==============================");
printf("\n|  VGS Member Gerenciator  2.0 ||");								  //PARTE 3
printf("\n==============================");
printf("\n				by Kelvin D_D Programs");
printf("\n||");
printf("\n====================||||");
printf("\n[1] Cadastrar Membro||||");
printf("\n[2] Editar Cadastro ||||");
printf("\n[3] Remover Cadastro||||");
printf("\n[4] Pesquisar	   ||||");
printf("\n[5] Sobre		   ||||");
printf("\n[6] Sair			||||");
printf("\n====================||||");
printf("\n====================||||");
printf("\nDigite o numero referente a funcao!");
printf("\n------------------------------------\n\n");
scanf("%d",&funcao);
switch(funcao){
					case 1:cadastrar();break;		
					case 2:editar();break;
					case 3:remover();break;
					case 4:pesquisar();break;
					case 5:ajuda();break;
					case 6:return 0;break;
					default:printf("Essa opcao não existe!");break;
} }}while(repet == 's');}

Primeiro = O Programa não passa da PARTE 1 pois quando ele compara as strings sempre da 'diferente', ou seja ela nao passa para a PARTE 2

Segundo = Ele não está criando o arquivo para a senha no diretorio ("Security/program_key.txt");

Terceiro = Estou com dor de cabeça, plix me ajudem. O problema é simples, mas a dor de cabeça nao me deixa pensar direito.

 

 

 

 

Atenciosamente,

Kelvin.

Compartilhar este post


Link para o post
Compartilhar em outros sites

primeiro vamos la..

comparação de STRINGS naum se usa o operador '==' e sim usa o strcmp ou stricmp, no caso q é uma senha a melhor forma é o strcmp.

 

segundo, em C qnd você for colocar o caminho você tem q colocar ao invez de uma barra ('/') tem q colocar duas ('//');

assim:

Security//program_key.txt

faça isso e fala se algo + falha.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro: é o que quit disse, você tem que utilizar strcmp porque se utilizar ==, o programa irá comparar os endereços das strings e vai retornar falso.

Segundo: provavelmente vai começar a funcionar quando você mudar o strcmp ali. Acho que não precisa duas barras.

Terceiro: Neosaldina.

 

EDIT: esqueci de dizer, se a pasta Security não existir tenho certeza que não irá criar o arquivo. Você precisará criar a pasta manualmente. Pode ser já criada a pasta lá junto com o programa e ser distribuída junto com o programa, ou você pode usar algum comando para criar a pasta durante a execução do programa. O único que consigo pensar agora para programas em console é o mkdir do DOS, que você usaria com system: system("mkdir \\Security");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Terceiro: Neosaldina.

UFDAHSUFHAUSDHFUASHDUFAHSDUFHAUSDHFUASHDUFHUSD essa foi f*** HDUSahufha

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - WtF is Neosaldina? uishauishiahisua http://forum.imasters.com.br/public/style_emoticons/default/yay.gif

 

2 - Resolvi o problema do strcmp.

 

3 - Sim, a pasta é criada por um comando do DOS ;].

 

4 - O único problema agora é:

 

printf("Digite a senha de administracao!\n");
printf("\n\nSENHA ==>  ");
scanf("%s",&sPass);
printf("%s", sPass);
_sleep(1500);
if(registro = fopen("Security/program_key.txt","r")){
strings = getc(registro);
}
Beep(1000,80);
if (strings == sPass) printf(" ===> SENHA CORRETA #Acesso Liberado#");
else {
	 Beep(500,80); Beep(500,80);
	 printf(" ===> SENHA INCORRETA! #Acesso Negado#\n\n\n");
	 iAux =1;
	 system("pause");
	 }
	 }while(iAux == 1);
printf("\n\n\nCarregando...");
_sleep(1500);

Ta dando erro, tipo quando eu digito a senha que fica armazenada no arquivo "program_key.txt" e dou ENTER o programa retorna um erro no proprio .exe

 

Acho que o problema está na forma como ele está lendo o arquivo com a senha.. talvez, não sei ao certo.

 

Help Please.

 

EDIT: Ah, Neosaldina não fumega comigo =p . Só passa depois do paracetamol x].

Falo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

te disse pra usar duas barras no caminho.. naum sei se é isso, + naum custa tentar.

e outra ql o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não po.. esse codigo ai eu peguei do proprio post.. aki eu ja alterei as barrinhas..

 

o erro era que tinha parado de funcionar o .exe .. o dev-c++ nao mostrou nenhum erro.

 

=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você declara sPass e strings como char.

Você lê uma string em sPass. Ler string em variável char não combina :P Se for alterar a variável para uma string, então tire o & do scanf porque string já é ponteiro.

strings tudo bem, lê só um char do arquivo... mas nesse caso você quer que a senha seja um caractere ou uma string mesmo? :huh:

Nota: ler %s significa que o scanf irá terminar de ler após encontrar caracteres de espaço em branco, incluindo, erm.... espaço em branco. No caso, não seria possível digitar uma senha com várias palavras a não ser que separasse as palavras com '_', e se digitasse uma senha com espaços, iria ficar bastante lixo no buffer de entrada.

 

strings == sPass

Aqui também precisa de strcmp.

Compartilhar este post


Link para o post
Compartilhar em outros sites

printf("\n\nSENHA ==>  ");
scanf("%s",&sPass);
printf("%s",sPass);
_sleep(1500);
if(registro = fopen("Security//program_key.txt","r")){
strings = getc(registro);
}
Beep(1000,80);
if (!strcmp(strings,sPass)) printf(" ===> SENHA CORRETA #Acesso Liberado#");
else {
	 Beep(500,80); Beep(500,80);
	 printf(" ===> SENHA INCORRETA! #Acesso Negado#\n\n\n");
	 iAux =1;
	 system("pause");
	 }
	 }while(iAux == 1);

Não consegui entender muito o que você falou ai x), falha minha .

Seguinte.. strings está definido como char (char strings;) sPass está definido como char também, porém (char sPass[50];)

ERRO: Quando ele vai comparar strings com sPass no strcmp, ele diz: invalid conversion from 'char' to 'const char*'

já tentei fazer tipo.. quando ele ler o arquivo e armazenar em strings, passar essa string para uma variavel "const char*" mas não deu muito certo..

 

E agora? iushaihsia

Compartilhar este post


Link para o post
Compartilhar em outros sites

posta seu código como ta no momento para eu analisar.

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código Completo.

 

 

//Sistema de Segurança®
//===== Patch 2.0 =====
//Adoção de Senha.
//-----------------------|

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>

//Voids dos Cases
void remover();
void cadastrar();
void pesquisar();
void editar();
void ajuda();
// ---------------------- Variáveis!!!
char defpass[50];
char defpass2[50];
char repet='s'; // Char de Repetição.
FILE *registro; // Variável de Arquivo. 
char st[50];
char st2[50];
char st3[50];
char id[50];
char stat[50];
char nficha[30];
char nficha2[30];
char strings;
char rank[50];
char sPass[50];
int abc;
int funcao;
int security;
int iAux;
int main(){ //MAIN

//Sistema de Segurança
do{
		  
printf("Aguarde..."); _sleep(2000);
registro = fopen("Security//program_key.txt","r");
			if(!registro)
			 {
						  
						  system("cls");
						  printf("|______________________________________________|\n");
						  printf("|=Seja bem vindo ao Sistema de Seguranca K.D.D.|\n\n\n");
						  printf("|______________________________________________|\n");
						  printf("|=Voce ainda nao possui uma senha definida,	|\n");
						  printf("|=Digite agora, sua senha:  ");
						  scanf("%s",&defpass);
						  printf("- Confirme sua senha: ");
						  scanf("%s",&defpass2);
						  printf("|______________________________________________|\n");
						  if(!strcmp(defpass,defpass2)){
												 if(registro = fopen("Security//program_key.txt","w"))
												 fprintf(registro,"%s",defpass2);
												 fclose(registro);
												 printf("\n\nDefinicao de Senha Concluida!\n");
												 printf("Faça bom proveito do programa! =D");
												 _sleep(1500);
												 }
													  else{
														   if(defpass!=defpass2)
													  printf("Voce digitou senhas diferentes, tente novamente!");
													  _sleep(1500);
													  }}while(security=1);
													  
													  
													  
													  
						  
									 
if(security!= 1);
iAux = 0; 
system("color 2");
system("cls");
printf("==========================================\n");
printf("||	   K_D_D_   Security System	   ||\n");
printf("------------------------------------------\n");
printf("Digite a senha de administracao!\n");
printf("\n\nSENHA ==>  ");
scanf("%s",&sPass);
printf("%s",sPass);
_sleep(1500);
if(registro = fopen("Security//program_key.txt","r")){
strings = getc(registro);
}
Beep(1000,80);
if (!strcmp(strings,sPass)) printf(" ===> SENHA CORRETA #Acesso Liberado#");
else {
	 Beep(500,80); Beep(500,80);
	 printf(" ===> SENHA INCORRETA! #Acesso Negado#\n\n\n");
	 iAux =1;
	 system("pause");
	 }
	 }while(iAux == 1);
printf("\n\n\nCarregando...");
_sleep(1500);
//Menu*
do{
if (iAux!=1) {
system("cls");
system("color 4");
printf("\n==============================");
printf("\n|  VGS Member Gerenciator  2.0 ||");
printf("\n==============================");
printf("\n				by Kelvin D_D Programs");
printf("\n||");
printf("\n====================||||");
printf("\n[1] Cadastrar Membro||||");
printf("\n[2] Editar Cadastro ||||");
printf("\n[3] Remover Cadastro||||");
printf("\n[4] Pesquisar	   ||||");
printf("\n[5] Sobre		   ||||");
printf("\n[6] Sair			||||");
printf("\n====================||||");
printf("\n====================||||");
printf("\nDigite o numero referente a funcao!");
printf("\n------------------------------------\n\n");
scanf("%d",&funcao);
switch(funcao){
					case 1:cadastrar();break;		
					case 2:editar();break;
					case 3:remover();break;
					case 4:pesquisar();break;
					case 5:ajuda();break;
					case 6:return 0;break;
					default:printf("Essa opcao não existe!");break;
} }}while(repet == 's');}






//Cadastrar Membros**
void cadastrar(){
system("cls");
system("color 3");
getchar();
printf("================== SISTEMA DE CADASTRO =================\n\n");
printf("Digite o nome do cadastro: ");
gets(nficha);  
if (registro = fopen(nficha,"w"))   /* Arquivo !*/
//Dados de Entrada**
system("cls");
printf("===== Ficha de Cadastro =====");
printf("\n\nNome: ");
gets(st);
printf("Idade: ");
gets(id);
printf("Cidade/Estado: ");
gets(st2);
printf("Nickname: ");
gets(st3);
printf("RANK: ");
gets(rank);
printf("Status: ");
gets(stat);	 
//Dados de Saída*
	fprintf(registro,"===== Ficha do Membro ======");
	fprintf(registro,"\n||-");
	fprintf(registro,"\nNome: %s",st);
	fprintf(registro,"\nIdade: %s",id);
	fprintf(registro,"\nCidade/Estado: %s",st2);
	fprintf(registro,"\nNickname: %s",st3);
	fprintf(registro,"\nRank: %s",rank);
	fprintf(registro,"\nStatus: %s",stat);
	fprintf(registro,"\n==============================-|");
	fclose(registro);
	system("pause");
}
	
//Remover Cadastro*
void remover(){
system("cls");
system("color 6");
printf("================= SISTEMA DE REMOCAO =================\n\n");
printf("Digite o nome do cadastro a ser removido: \n");
scanf("%s",&nficha);
if(registro = fopen(nficha,"r")){
system("cls");
printf("Voce tem certeza? (s/n)\n\n");
scanf("%s",&abc);
switch(abc){
			case 's'|'S': 
				 if(remove(nficha))
					  _sleep(950);
					  system("msg * Registro Removido!");
					  system("pause");
					  break;
			case 'n'|'N':
				 system("msg * Remoção Cancelada!");break;
				 }}
				 if(!registro){
						  system("msg * O registro não existe ou esta protegido!");
						  }}

//Pesquisar**
void pesquisar(){
system("cls");
printf("============= SISTEMA DE PESQUISA ============\n\n");
printf("Digite o nome do cadastro: ");
scanf("%s",&nficha);
if((registro = fopen(nficha,"r")) == NULL)
{
			 printf("Erro ao abrir arquivo!\n\n");_sleep(900);
			 system("pause");
			 }
			 
			 do
			 {
		strings = getc(registro);
		putchar(strings);
	  }
	while(strings != EOF);

	printf("\n\n");
	fclose(registro);
	system("pause");
  }
  
  //Editar Cadastro** -----------------------------------------------|Mostrar Dados
  void editar(){
	   system("cls");
	   system("color 7");
printf("============= SISTEMA DE EDICAO ==============\n\n");
printf("Digite o nome do cadastro para editar: ");
scanf("%s",&nficha);
if((registro = fopen(nficha,"r")) == NULL)
{
			 printf("Erro ao abrir arquivo!");
			 exit(1);
			 };
			 
			 do
			 {
		strings = getc(registro);
		putchar(strings);
	  }
	while(strings != EOF);

	printf("\n\n");
	fclose(registro);
	//Parte da Ficha----------------------------------------------------|

//Second Part.

getchar();
//Novos Dados de Entrada**
system("cls");
printf("===== Ficha de Cadastro =====");
printf("\n\nNome: ");
gets(st);
printf("Idade: ");
gets(id);
printf("Cidade/Estado: ");
gets(st2);
printf("Nickname: ");
gets(st3);
printf("RANK: ");
gets(rank);
printf("Status: ");
gets(stat);	 
//Novos Dados de Saída*
	fprintf(registro,"===== Ficha do Membro ======");
	fprintf(registro,"\n||-");
	fprintf(registro,"\nNome: %s",st);
	fprintf(registro,"\nIdade: %s",id);
	fprintf(registro,"\nCidade/Estado: %s",st2);
	fprintf(registro,"\nNickname: %s",st3);
	fprintf(registro,"\nRank: %s",rank);
	fprintf(registro,"\nStatus: %s",stat);
	fprintf(registro,"\n==============================-|");
	fclose(registro);
	printf("Salvando Cadastro...");
	_sleep(2000);
	system("pause");
}
   //Sobre!
   void ajuda(){
	   system("color 5");
	   system("cls");
	   printf("================ Sobre* ================\n");
	   printf(" >>> Esta e a segunda versao do programa\n");
	   printf(" >>> com novas funcoes e bugs corrigidos.\n");
	   printf(" >>> VGS MG: 2.0 // Copyright@2009™	 \n");
	   printf(" >>>									\n");
	   printf("\n");
	   printf("\n");
	   printf(" >>> Agradecimentos:					\n");
	   printf(" +Forum iMaster por tirar algumas duvidas\n");
	   printf(" +Especialmente QuitZaumm*/*			 \n");			  // Não se ache! ishaiushiahsiai
	   printf("========================================\n");
	   system("pause");
	   }

Espero por sua análise.

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja como eu deixei sua main:

 

int main(){ //MAIN

//Sistema de Segurança
	if ((fopen("Security//program_key.txt","r")) == NULL) {
		while(true){
			printf("Aguarde...");
			_sleep(2000);
			system("cls");
			printf("|______________________________________________|\n");
			printf("|=Seja bem vindo ao Sistema de Seguranca K.D.D.|\n\n\n");
			printf("|______________________________________________|\n");
			printf("|=Voce ainda nao possui uma senha definida,	|\n");
			printf("|=Digite agora, sua senha:  ");
			scanf("%s%*c", defpass);
			printf("- Confirme sua senha: ");
			scanf("%s%*c",&defpass2);
			printf("|______________________________________________|\n");
			if(!strcmp(defpass,defpass2)){
				registro = fopen("Security//program_key.txt","w");
				if (registro != NULL){
					fprintf(registro,"%s",defpass2);
					fclose(registro);
					printf("\n\nDefinicao de Senha Concluida!\n");
					printf("Faça bom proveito do programa! =D");
					_sleep(1500);
					break;
				}
			}
			else{
				printf("Voce digitou senhas diferentes, tente novamente!");
				_sleep(1500);
			}
		}
	}
	int iAdm = 0;
	while(true){
		system("color 2");
		system("cls");
		printf("==========================================\n");
		printf("||	   K_D_D_   Security System	   ||\n");
		printf("------------------------------------------\n");
		printf("Digite a senha de administracao!\n");
		printf("\n\nSENHA ==>  ");
		scanf("%s", sPass);
		printf("%s",sPass);
		_sleep(1500);
		registro = fopen("Security//program_key.txt","r");
		if (registro != NULL) fgets(strings,49,registro);//strings = getc(registro);
		Beep(1000,80);
		if (!strcmp(strings,sPass)) {
			printf(" ===> SENHA CORRETA #Acesso Liberado#");
			_sleep(1500);
			iAdm = 1;
			break;
		}
		else {
			Beep(500,80);
			Beep(500,80);
			printf(" ===> SENHA INCORRETA! #Acesso Negado#\n\n\n");
			_sleep(1500);
		}
	}
	if (iAdm == 1) {
		printf("\n\n\nCarregando...");
		_sleep(1500);
		do{
			system("cls");
			system("color 4");
			printf("\n==============================");
			printf("\n|  VGS Member Gerenciator  2.0 ||");
			printf("\n==============================");
			printf("\n				by Kelvin D_D Programs");
			printf("\n||");
			printf("\n====================||||");
			printf("\n[1] Cadastrar Membro||||");
			printf("\n[2] Editar Cadastro ||||");
			printf("\n[3] Remover Cadastro||||");
			printf("\n[4] Pesquisar	   ||||");
			printf("\n[5] Sobre		   ||||");
			printf("\n[6] Sair			||||");
			printf("\n====================||||");
			printf("\n====================||||");
			printf("\nDigite o numero referente a funcao!");
			printf("\n------------------------------------\n\n");
			scanf("%d",&funcao);
			switch(funcao){
				case 1:cadastrar();break;
				case 2:editar();break;
				case 3:remover();break;
				case 4:pesquisar();break;
				case 5:ajuda();break;
				case 6:"Obrigado por utilizar meu sistema";break;
				default:printf("Essa opcao não existe!");break;
			}
		}while(funcao != 6);
	}
	return 0;
}

detalhe:

na declaração das variaveis soh mudei isso:

char strings[50];
[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi perfeitamente as mudanças, e minha falta de identação também ishuashia' falta costume nisso.

 

Obrigado à todos pela ajuda,

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.