Ir ao conteúdo
  • Cadastre-se

C Não consigo descobrir qual é o erro no meu código


aabb1498

Posts recomendados

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

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 15/01/2019 às 16:19, aabb1498 disse:

memset(pac.msg,0,sizeof(pac.msg));

O operador sizeof nessa situação enxerga em pac.msg apenas o objeto que ele é, e não a quantidade de bytes que ele  aponta, ou seja, sizeof(pac.msg) == 4 bytes (quando no sistema 32 bits) o tamanho para um ponteiro padrão.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

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