Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Postado

Eu estou tentado fazer uma espécie de e-mail em C, mas estou com um pequeno problema: o fclose da linha 39 (que está depois do término de um for, no primeiro programa) não está funcionando. O programa compila normalmente mas, na hora da execução (desse comando), fica apenas carregando. Vou colocar os scripts abaixo para vocês entenderem.

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
#include<locale.h>
#include<time.h>

int main(){
	setlocale(LC_CTYPE,"Portuguese");
	FILE *CaixaEntrada;
	int a, i, op, hor;
	char mensagem[100], email[10000], ContaAtual[100];
	char texto[10000], email2[100], tempo[20];
	char nome[50], sobrenome[50];
	struct tm * tm;
	time_t t;
	CxEnt: CaixaEntrada = fopen("ContaAtual.txt","r");
	if(feof(CaixaEntrada)) system("EntrarConta.exe");
	fgets(ContaAtual,100,CaixaEntrada);
	strcpy(email,ContaAtual);
	strcat(email,"CaixaEntrada");
	strcat(email,".txt");
	fclose(CaixaEntrada);
	CaixaEntrada = fopen(ContaAtual,"r");
	fgets(nome,50,CaixaEntrada);
	fgets(sobrenome,50,CaixaEntrada);
	nome[strlen(nome)-1] = '\0';
	sobrenome[strlen(sobrenome)-1] = '\0';
	fclose(CaixaEntrada);
	system("cls");
	printf("CAIXA DE ENTRADA de %s %s\n\n",nome,sobrenome);
	CaixaEntrada = fopen(email,"r");
	printf("Mensagens novas:\n\n");
	for(;;){
		fgets(mensagem,1000,CaixaEntrada);
		if(strcmp(mensagem,"\n")!=0) printf("-> %s\n",mensagem);
		else break;
	}
	fclose(CaixaEntrada);
	CaixaEntrada = fopen(email,"w");
	fclose(CaixaEntrada);
	printf("\n(1) Sair da Conta\n");
	printf("(2) Escrever\n");
	printf("(3) Sair\n");
	op = getchar();
	op-=48;
	if(op==1){
		fclose(CaixaEntrada);
		CaixaEntrada = fopen("ContaAtual.txt","w");
		fclose(CaixaEntrada);
		system("cls");
		printf("Saindo...");
		Sleep(500);
		system("EntrarConta.exe");
	}
	if(op==2){
		fclose(CaixaEntrada);
		system("cls");
		printf("\t\tESCREVER\n\n");
		printf("Digite o endereço de e-mail do destinatário (sem @nimail.com): ");
		scanf("%s",email2);
		printf("Digite o e-mail (não dê ENTER até acabar): ");
		fflush(stdin);
		gets(texto);
		strcpy(email,email2);
		strcat(email,"CaixaEntrada");
		strcat(email,".txt");
		CaixaEntrada = fopen(email,"a");
		time(&t);
		tm = localtime(&t);
		sprintf(tempo,"%s",asctime(tm));
		tempo[strlen(tempo)-1] = '\0';
		printf("(%s)\n",tempo);
		fprintf(CaixaEntrada,"%s | ",tempo);
		fprintf(CaixaEntrada,"%s | De %[email protected]\n\n",texto,ContaAtual);
		fclose(CaixaEntrada);
		printf("Texto enviado con sucesso!\n");
		j: printf("(1) Voltar para a caixa de entrada\n");
		printf("(2) Sair da conta\n");
		op = getch();
		printf("%c\n",op);
		if(op=='1') goto CxEnt;
		else if(op=='2'){
			CaixaEntrada = fopen("ContaAtual.txt","w");
			fclose(CaixaEntrada);
			system("cls");
			printf("Saindo...");
			Sleep(500);
			system("start EntrarConta.exe");
		}
		else{
			printf("Opção inválida!! Digite 1 ou 2.\n");
			goto j;
		}
	}
	if(op==3){
		getch();
		exit(2);
	}
}


  

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

int main(){
	FILE *nconta;
	FILE *GeraConta;
	FILE *email;
	setlocale(LC_CTYPE,"Portuguese");
	struct nascimento{
		int dia;
		int mes;
		int ano;
	};
	char email2[100];
	struct conta{
		char nome[50];
		char sobrenome[50];
		char endereco[20];
		char senha[30];
		int idade;
		struct nascimento data;
		char sexo;
	}contas;
	
	int numconta, a, i, anoi;
	char data[10], anoc[5];
	
	printf("CRIAR CONTA NO NIMAIL\n\n");
	printf("Seu primeiro nome: ");
	scanf("%s",&contas.nome);
	printf("\nSeu sobrenome: ");
	scanf("%s",&contas.sobrenome);
	printf("\nDigite um endereço de email: ");
	GeraEndereco: scanf("%s",&contas.endereco);
	GeraConta = fopen(contas.endereco,"r");
	if(GeraConta != NULL){
		fclose(GeraConta);
		printf("Esse endereço já foi usado. Tente outro!");
		goto GeraEndereco;
	}
	fclose(GeraConta);
	GeraConta = fopen(contas.endereco,"a");
	printf("\nDigite o dia de seu nascimento: ");
	scanf("%d",&contas.data.dia);
	printf("Digite o mês de seu nascimento: ");
	scanf("%d",&contas.data.mes);
	printf("Digite o ano de seu nascimento: ");
	scanf("%d",&contas.data.ano);
	_strdate(data);
	a=0;
	for(i=6; i<strlen(data); i++){
		anoc[a] = data[i];
		a++;
	}
	anoi = atoi(anoc)+2000;
	contas.idade = anoi - contas.data.ano;
	printf("\nQual é seu sexo ('M' para masculino, 'F' para feminino): ");
	contas.sexo = getch();
	printf("%c\n",contas.sexo);
	printf("\nDigite sua senha: ");
	scanf("%s",&contas.senha);
	fprintf(GeraConta,"%s\n%s\n",contas.nome,contas.sobrenome);
	fprintf(GeraConta,"%d/%d/%d\n",contas.data.dia,contas.data.mes,contas.data.ano);
	fprintf(GeraConta,"%c\n",contas.sexo);
	fprintf(GeraConta,"%s\n",contas.senha);
	fclose(GeraConta);
	system("pause");
	system("cls");
	printf("Cadastramento feito com sucesso.\n");
	printf("Você já pode sair! Pressione qualquer tecla para sair...\n");
	getch();
	strcpy(email2,contas.endereco);
	strcat(email2,"CaixaEntrada");
	strcat(email2,".txt");
	email = fopen(email2,"a");
	fclose(email);
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<locale.h>
#include<windows.h>

void erro(){
	printf("Erro! Email ou senha inválidos!\n");
	getch();
}

int main(){
	setlocale(LC_CTYPE,"Portuguese");
	FILE *EntraConta;
	int a, i, op;
	char email[50], senha[20], senha1[20];
	char nome[50], sobrenome[50], h=0;
	//REDIRECIONA PARA CAIXA DE ENTRADA SE JÁ TIVER NUMA CONTA...
	EntraConta = fopen("ContaAtual.txt","r");
	if(EOF) goto escolha;
	
	fscanf(EntraConta,"%s",&email);
	fclose(EntraConta);
	EntraConta = fopen(email,"r");
	fgets(nome,50,EntraConta);
	fgets(sobrenome,50,EntraConta);
	nome[strlen(nome)-1] = '\0';
	sobrenome[strlen(sobrenome)-1] = '\0';
	printf("Redirecionado para caixa de entrada de %s %s...",nome,sobrenome);
	fclose(EntraConta);
	Sleep(1000);
	system("cls");
	system("Email.exe");
	
	//-----------------------------------------------------------------
	//ENTRAR NUMA CONTA OU CRIAR CONTA
	escolha:
		system("cls");
		printf("Escolha uma opção:\n");
		printf("(1) Entrar na minha conta\n");
		printf("(2) Criar uma conta\n");
		fflush(stdin);
		op=getchar();
		op-=48;
		//ENTRAR NA CONTA
		if(op==1){
			entrar: system("cls");
			printf("Digite 1 para voltar.\n");
			printf("Digite seu endereço de email (sem @nimail.com): ");
			scanf("%s",&email);
			if(atoi(email)==1) goto escolha;
			EntraConta = fopen(email,"r");
			printf("Senha: ");
			scanf("%s",&senha);
			if(EntraConta == NULL){
				erro();
				goto entrar;
			}
			while(fgets(senha1,20,EntraConta) != NULL);
			senha1[strlen(senha1)-1]='\0';
			if(strcmp(senha,senha1)==0){
				EntraConta = fopen("ContaAtual.txt","w");
				fprintf(EntraConta,"%s",email);
				fclose(EntraConta);
				EntraConta = fopen(email,"r");
				fgets(nome,50,EntraConta);
				fgets(sobrenome,50,EntraConta);
				nome[strlen(nome)-1] = '\0';
				sobrenome[strlen(sobrenome)-1] = '\0';
				printf("Redirecionado para caixa de entrada de %s %s...",nome,sobrenome);
				fclose(EntraConta);
				Sleep(1000);
				system("cls");
				system("Email.exe");
			}
			else{
				erro();
				goto entrar;
			}
		}
		//-----------------------------------------------------------------
		//CRIAR CONTA
		else if(op==2){
			system("cls");
			system("CadastramentoNiMail.exe");
			goto escolha;
		}
		//-----------------------------------------------------------------
		//OPÇÃO INVÁLIDA
		else{
			printf("Opção inválida!!\n");
			getch();
			goto escolha;
		}
		//-----------------------------------------------------------------
}

 

  • Amei 1
Postado

@Daniel Oliveira     o fclose funciona bem ,  e ele fica direto carregando é por que entra em um Loop infinito :

#include<stdio.h>
#include<algorithm>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#include<string.h>
#include<locale.h>
#include<time.h>
int main()
{
    printf("Content-type: text/plain\n\n");
    printf("Ola, Mundo!");

/*
 *    precisa usar esse CGI
 */

	FILE *CaixaEntrada;
	int a, i, op, hor;
	char mensagem[100], email[10000], ContaAtual[100],
	     texto[10000], email2[100], tempo[20],
	     nome[50], sobrenome[50];
	struct tm * tm;
	time_t t;
	printf("aqui 1     Tecle\n");
	getch();
	CxEnt: CaixaEntrada = fopen("ContaAtual.txt","r");
	printf("aqui 2     Tecle\n");
	getch();
//    if(feof(CaixaEntrada)) system("notepad.exe");// esse executável não tenho ->   EntrarConta.exe
	printf("aqui 3     Tecle\n");
	getch();
	fgets(ContaAtual,100,CaixaEntrada);
	printf("aqui 4     Tecle\n");
	getch();
	strcpy(email,ContaAtual);
	strcat(email,"CaixaEntrada");
	strcat(email,".txt");
	fclose(CaixaEntrada);
	CaixaEntrada = fopen(ContaAtual,"r");
	fgets(nome,50,CaixaEntrada);
	fgets(sobrenome,50,CaixaEntrada);
	nome[strlen(nome)-1] = '\0';
	sobrenome[strlen(sobrenome)-1] = '\0';
	fclose(CaixaEntrada);
	system("cls");
	printf("CAIXA DE ENTRADA de %s %s\n\n",nome,sobrenome);
	printf("aqui 5 nome -> %s     Tecle\n",nome);
	getch();
	CaixaEntrada = fopen(email,"r");
	printf("Mensagens novas:\n\n");
	//for(;;){     aqui entra nesse Loop 
	while( 1 )  // aqui seria igual a hum while
    {
		fgets(mensagem,1000,CaixaEntrada);
		if(strcmp(mensagem,"\n")!=0) printf("-> %s\n",mensagem);
		else break;
		getch();
	}
	//   e não sai desse Loop nunca
	fclose(CaixaEntrada);  // mas o fclose não tem nada a ver com o erro
	printf("aqui\n");
	getch();
	CaixaEntrada = fopen(email,"w");
	fclose(CaixaEntrada);
	printf("\n(1) Sair da Conta\n");
	printf("(2) Escrever\n");
	printf("(3) Sair\n");
	op = getchar();
	op-=48;
	if(op==1){
		fclose(CaixaEntrada);
		CaixaEntrada = fopen("ContaAtual.txt","w");
		fclose(CaixaEntrada);
		system("cls");
		printf("Saindo...");
		Sleep(500);
		system("EntrarConta.exe");
	}
	if(op==2){
		fclose(CaixaEntrada);
		system("cls");
		printf("\t\tESCREVER\n\n");
		printf("Digite o endereço de e-mail do destinatário (sem @nimail.com): ");
		scanf("%s",email2);
		printf("Digite o e-mail (não dê ENTER até acabar): ");
		fflush(stdin);
		gets(texto);
		strcpy(email,email2);
		strcat(email,"CaixaEntrada");
		strcat(email,".txt");
		CaixaEntrada = fopen(email,"a");
		time(&t);
		tm = localtime(&t);
		sprintf(tempo,"%s",asctime(tm));
		tempo[strlen(tempo)-1] = '\0';
		printf("(%s)\n",tempo);
		fprintf(CaixaEntrada,"%s | ",tempo);
		fprintf(CaixaEntrada,"%s | De %[email protected]\n\n",texto,ContaAtual);
		fclose(CaixaEntrada);
		printf("Texto enviado con sucesso!\n");
		j: printf("(1) Voltar para a caixa de entrada\n");
		printf("(2) Sair da conta\n");
		op = getch();
		printf("%c\n",op);
		if(op=='1') goto CxEnt;
		else if(op=='2'){
			CaixaEntrada = fopen("ContaAtual.txt","w");
			fclose(CaixaEntrada);
			system("cls");
			printf("Saindo...");
			Sleep(500);
			system("start EntrarConta.exe");
		}
		else{
			printf("Opção inválida!! Digite 1 ou 2.\n");
			goto j;
		}
	}
	if(op==3){
		getch();
		exit(2);
	}
}

 

Postado

@devair1010 , muito obrigado pela ajuda e pela boa explicação! Mas o problema não foi solucionado. Aí eu vi que a variável "mensagem" não suportava a quantidade de texto pedido naquele while.

// Na declaração
char mensagem[100], email[10000], ContaAtual[100], // Veja que "mensagem" só suporta 100 caracteres
     texto[10000], email2[100], tempo[20],
     nome[50], sobrenome[50];

while(fgets(mensagem,10000,CaixaEntrada)!=NULL){ // E aqui eu estava pedindo 10.000 caracteres
		printf("-> %s\n",mensagem);
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...