Boa tarde, gente. Estou começando a programar em C e preciso mesmo de ajuda para identificar os motivos que impedem a execução do programa.
O objetivo dele é o seguinte: ler uma mensagem do teclado, passar para o arquivo de saída, daí ele deve pegar essa mesma mensagem e armazenar em uma string que deve ser gravada no arquivo enviadas, ao identificar uma nova mensagem no arquivo enviadas, o sistema deve escrever no arquivo recebidas confirmando. Eu uso a contagem de linhas para definir se há novas mensagens. Sei que o código não é nada elegante, mas é que eu realmente estou começando.
Ele não está nem escrevendo a string "mensagem" no arquivo de saída, mas não ocorre nenhum erro na compilação. Eu coloquei algumas funções para indicar se deu erro na leitura da string, mas nunca resultou em erro.
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
struct pacote{
int npac;
char msg[130];
};
int linhas(FILE *fp){
int nlinhas=0;
char c;
while ((c=fgetc(fp))!=EOF){
if (c=='\n')
nlinhas++;
}
return nlinhas;
}
int main()
{
char mensagem[130], conf[20]="Mensagem recebida";
FILE *fsaida,*fenv,*frec;
int nlinhas=0, n=0;
struct pacote pac;
if ((fsaida= fopen("saida.txt", "w+"))==NULL){
perror("erro arq saida ");
return 1;
}
if ((fenv= fopen("enviadas.txt", "a+"))==NULL){
perror("erro arq enviadas ");
return 1;
}
if ((frec= fopen("recebidas.txt", "a+"))==NULL){
perror("erro arq recebidas ");
return 1;
}
//pega mensagem do teclado
printf("Entre com a mensagem: ");
gets(mensagem);
//escreve mensagem no arquivo de saída
if((fputs(mensagem, fsaida))==EOF)
printf("erro saida");
printf("%d",ferror(fsaida));
//número do pacote
nlinhas=linhas(frec);
pac.npac=nlinhas+1;
memset(pac.msg,0,sizeof(pac.msg));
fgets(pac.msg, sizeof(pac.msg), fsaida);
printf("%d",ferror(fsaida));
printf("%s",pac.msg);
if(fgets(pac.msg, sizeof(pac.msg), fsaida)==NULL)
printf("erro fgets\n");
//envio de pacote
fprintf(fenv, "%d. %s\n", pac.npac, pac.msg);
//checar se há novas mensagens
do {
nlinhas=linhas(fenv);
}
while(n<=nlinhas);
printf("%d\n",n);
if(n>nlinhas){
fprintf(frec, "%s\n", conf);
printf("%s\n",conf);}
fclose(fsaida);
fclose(frec);
fclose(fenv);
system("pause");
return 0;
}