Ir ao conteúdo

Posts recomendados

Postado

 for(i=0; i<strlen(x);i++){

    fprintf(arq,x.Pessoa.nome );
    fprintf(arq, "\n");     
    fprintf(arq,x.Pessoa.idade );
    }

Minha dúvida é como colocar no argumento dentro do for, porque quando é apenas uma linha posso colocar o  i<strlen(x), mas quero gravar nome e idade. Como fazer 

 

  • Curtir 1
Postado

@Simon Viegas 

/*Faça um programa que armazene em um registro de dados (estrutura composta) os
dados de um funcionário de uma empresa, compostos de: Nome, Idade, Sexo (M/F),
CPF, Data de Nascimento, Código do Setor onde trabalha (0-99), Cargo que ocupa
(string de até 30 caracteres) e Salário. Os dados devem ser digitados pelo usuário,
armazenados na estrutura e exibidos na tela.*/
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

struct pessoa {
    char nome[50];
    int idade;
    char sexo;
    unsigned long int cpf;
    char dataNas[15];

};

typedef struct funcionario {
    char cep[15];
    char cargo[30];
    float salario;
    struct pessoa Pessoa;

} Funcionario;

int main() {
    setlocale(LC_ALL, "portuguese");
    FILE *arq;
    arq = fopen("arquivo.txt", "a");
    if (arq == NULL) {
        printf("Erro na gravação de dados\n\n");
        system("pause");
        exit(1);
    }
    int n, i;
    printf("Digite qnts funcionarios gostaria de inserir: ");
    scanf("%d", &n);
    Funcionario x[n];
    for (i = 0; i < n; i++) {
        getchar();
        printf("Nome: ");
        fgets(x[i].Pessoa.nome, 50, stdin);
        printf("Idade: ");
        scanf("%d", &x[i].Pessoa.idade);
        printf("Sexo(F/M): ");
        scanf("%s", &x[i].Pessoa.sexo);
        printf("CPF: ");
        scanf("%d", &x[i].Pessoa.cpf);
        printf("DataNascimento (ddmmaaa):");
        scanf("%s", &x[i].Pessoa.dataNas);
        printf("CEP: (00000000): ");
        scanf("%s", &x[i].cep);
        printf("Cargo: ");
        scanf("%s", &x[i].cargo);
        printf("Salário: ");
        scanf("%f", &x[i].salario);

    }
    printf("\n----DADOS---\n");

    for (i = 0; i < n; i++) {
        printf("Nome: %s", x[i].Pessoa.nome);
        printf("Idade: %d", x[i].Pessoa.idade);
        printf("\nSexo: %c", toupper(x[i].Pessoa.sexo));
        printf("\nCPF: %ld", x[i].Pessoa.cpf);
        printf("\nDataNascimento: %s", x[i].Pessoa.dataNas);
        printf("\nCEP: %s", x[i].cep);
        printf("\nCargo: %s", x[i].cargo);
        printf("\nSalário: %.2f\n", x[i].salario);
        printf("------------------------------\n");
    }

    printf("\n DADOS GRAVADOS EM ARQUIVOS \n ");

      
    for (i = 0; i < strlen(x[i].Pessoa.nome); i++) {
        fprintf(arq, x[i].Pessoa.nome);
        fprintf(arq, " ; ");
    }   
    /*
    for (i = 0; i <x[i].Pessoa.idade; i++)
    fprintf(arq, " ", x[i].Pessoa.idade);  
    for (i = 0; i <strlen(x[i].Pessoa.sexo); i++)
    fprintf(arq,  x[i].Pessoa.sexo);
    for (i = 0; i <strlen(x[i].Pessoa.cpf); i++)
    fprintf(arq, " ",x[i].Pessoa.cpf);
    for (i = 0; i <strlen(x[i].Pessoa.dataNas); i++)
    fprintf(arq, x[i].Pessoa.dataNas );
    for (i = 0; i <strlen(x[i].cep); i++)
    fprintf(arq,x[i].cep );
    for (i = 0; i <strlen(x[i].cargo); i++)
    fprintf(arq,  x[i].cargo);
    for (i = 0; i <10; i++)
    fprintf(arq, "valor: R$", x[i].salario);
    //*/
    fclose(arq);
    return 0;
}

Não precisa gravar em arq, só estava tentando

 

  • Curtir 1
  • Membro VIP
Postado

@Paula_Fabiana,


A minha pergunta:

1 hora atrás, Simon Viegas disse:

X é uma vetor? isso muda toda a interpretação!

 

Sua resposta:

10 minutos atrás, Paula_Fabiana disse:

@Simon Viegas Não, era só para testar gravar mais de uma linha em arquivo, ainda sou nova em programação....mas muito  obrigada :)

 

Mas veja, de fato X é um vetor!

2 minutos atrás, Paula_Fabiana disse:

Funcionario x[n];


Vou tentar explicar o que aconteceu... Ao não usar tag CODE, o parâmetro para posição do vetor sumiu (o [i ])... veja a diferença:

 

Código da primeira postagem (sem a tag CODE):

Em 03/10/2017 às 17:13, Paula_Fabiana disse:

for(i=0; i<strlen(x);i++){
    fprintf(arq,x.Pessoa.nome );
    fprintf(arq, "\n");     
    fprintf(arq,x.Pessoa.idade );
    } 


Código da última postagem (usando a tag CODE)

5 minutos atrás, Paula_Fabiana disse:

    for (i = 0; i < strlen(x[i].Pessoa.nome); i++) {
        fprintf(arq, x[i].Pessoa.nome);
        fprintf(arq, " ; ");
    }   

 

 

Perceba que o [i ] tinha sumido.. :D

 

Devido a isso, @devair1010 interpretou errado...

7 horas atrás, devair1010 disse:

@Paula_Fabiana     seu código está certo , mas não precisa do for pois se você colocar dentro de um for os dados serão gravados varias vezes, a não ser que seja exatamente isso que você quer fazer .

Ou seja, seu código original ficou parecendo que estava escrevendo a mesma coisa várias vezes... já no código mais recente, fica claro que eram várias posições diferentes, o que já dá a entender que estava no caminho certo... (tentado escreve nomes e idades diferentes).

 

 

 

***

 

 

Aproveitando, sobre o código atual:

5 minutos atrás, Paula_Fabiana disse:

    for (i = 0; i < strlen(x[i].Pessoa.nome); i++) {
        fprintf(arq, x[i].Pessoa.nome);
        fprintf(arq, " ; ");
    }   

 

Então, o que você quer escrever no arquivo? analisando o código, entendo que quer escrever os dados dos funcionários. Logo, a quantidade de funcionários que serão escritos é justamente a quantidade de funcionários que já foram cadastrados... logo, seria algo como:

 

for (i = 0; i < n); i++) {

Ou seja, "irá escrever o funcionário da posição 0 até a posição n-1 do vetor x.

 

 

PS: apesar do algoritmo ainda está na fase de implementação e testes, a frase abaixo:

18 minutos atrás, Paula_Fabiana disse:

printf("\n DADOS GRAVADOS EM ARQUIVOS \n ");

Está fora de posição, pois o dados não foram salvos no arquivo ainda... lá, apenas "Terminou de coletar os dados", entende? essa frase deveria fica após a estrutura que está salvando do arquivo... para exemplificar melhor, a posição onde está esse texto poderia ter: "Gravando dados no arquivo". Ai gravava, e após dada a mensagem que foi gravada... ;)

 

 

No aguardo.

adicionado 2 minutos depois

ADENDO: o comando strlen(x)  serve para retornar o tamanho do vetor? então deve servi também.

  • Curtir 1
Postado

@Simon Viegas Ah entendi, pois eh...eu  tentei fazer sem o vetor anteriormente, para pelo menos gravar, tentei outra vez aqui (porque tenho muitos exercícios para entregar e como não consegui, eu pulei ele ), mas continua dando errado, tipo grava o nome(string), mas para gravar os outros não esta dando certo,, nem idade , cpf... então desisti, vou arrumar mais livros para estudar arquivos, porque na net é muito vago, so mostra como gravar uma linha 

  • Curtir 1
Postado

@Simon Viegas Não consigo gravar int ou float, apenas string , Tentei colocar idade, mas continua gravando só string

 

arq txt -> paula Fabiana Rosa ; paula fabiana  ;  

 for (i = 0; i < strlen(x[i].Pessoa.nome); i++) {
        fprintf(arq, x[i].Pessoa.nome);
        fprintf(arq, " ; ");
    } 
    for (i = 0; i <x[i].Pessoa.idade; i++){
    fprintf(arq, " ", x[i].Pessoa.idade);}  

 

  • Curtir 1
  • Membro VIP
Postado

Veja, o que:
 

8 minutos atrás, Paula_Fabiana disse:

strlen(x[i].Pessoa.nome)

Significa?

 

ou seja, o for estará indo de 0 até o "tamanho do nome menos 1" (Paula tem 5 letras, logo irá de 0 a 4)... não tem nada a ver uma coisa com a outra...    mas na verdade você precisa ir de "0 a até a quantidade de funcionários menos 1". Acho que poder ser:
 

for (i = 0; i < n; i++) {

Se tenho 10 funcionários, vou de 0 a 9.

  • Curtir 1
Postado
/*Faça um programa que armazene em um registro de dados (estrutura composta) os
dados de um funcionário de uma empresa, compostos de: Nome, Idade, Sexo (M/F),
CPF, Data de Nascimento, Código do Setor onde trabalha (0-99), Cargo que ocupa
(string de até 30 caracteres) e Salário. Os dados devem ser digitados pelo usuário,
armazenados na estrutura e exibidos na tela.*/
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

struct pessoa {
    char nome[50];
    int idade;
    char sexo;
    unsigned long int cpf;
    char dataNas[15];

};

typedef struct funcionario {
    char cep[15];
    char cargo[30];
    float salario;
    struct pessoa Pessoa;

} Funcionario;

int main() {
    setlocale(LC_ALL, "portuguese");
    FILE *arq;
    arq = fopen("arquivo.txt", "a");
    if (arq == NULL) {
        printf("Erro na gravação de dados\n\n");
        system("pause");
        exit(1);
    }
    int n, i;
    printf("Digite qnts funcionarios gostaria de inserir: ");
    scanf("%d", &n);
    Funcionario x[n];
    for (i = 0; i < n; i++) {
        getchar();
        printf("Nome: ");
        fgets(x[i].Pessoa.nome, 50, stdin);
        printf("Idade: ");
        scanf("%d", &x[i].Pessoa.idade);
        printf("Sexo(F/M): ");
        scanf("%s", &x[i].Pessoa.sexo);
        printf("CPF: ");
        scanf("%d", &x[i].Pessoa.cpf);
        printf("DataNascimento (ddmmaaa):");
        scanf("%s", &x[i].Pessoa.dataNas);
        printf("CEP: (00000000): ");
        scanf("%s", &x[i].cep);
        printf("Cargo: ");
        scanf("%s", &x[i].cargo);
        printf("Salário: ");
        scanf("%f", &x[i].salario);

    }
    printf("\n----DADOS---\n");

    for (i = 0; i < n; i++) {
        printf("Nome: %s", x[i].Pessoa.nome);
        printf("Idade: %d", x[i].Pessoa.idade);
        printf("\nSexo: %c", toupper(x[i].Pessoa.sexo));
        printf("\nCPF: %ld", x[i].Pessoa.cpf);
        printf("\nDataNascimento: %s", x[i].Pessoa.dataNas);
        printf("\nCEP: %s", x[i].cep);
        printf("\nCargo: %s", x[i].cargo);
        printf("\nSalário: %.2f\n", x[i].salario);
        printf("------------------------------\n");
    }
 
    for (i = 0; i < n; i++) {
        fprintf(arq, x[i].Pessoa.nome);
        fprintf(arq, " ; ");
    } 
    for (i = 0; i <n; i++){
    fprintf(arq, " ", x[i].Pessoa.idade);}  
  printf("\n DADOS GRAVADOS EM ARQUIVOS \n ");
    /*
    for (i = 0; i <x[i].Pessoa.idade; i++)
    fprintf(arq, " ", x[i].Pessoa.idade);  
    for (i = 0; i <strlen(x[i].Pessoa.sexo); i++)
    fprintf(arq,  x[i].Pessoa.sexo);
    for (i = 0; i <strlen(x[i].Pessoa.cpf); i++)
    fprintf(arq, " ",x[i].Pessoa.cpf);
    for (i = 0; i <strlen(x[i].Pessoa.dataNas); i++)
    fprintf(arq, x[i].Pessoa.dataNas );
    for (i = 0; i <strlen(x[i].cep); i++)
    fprintf(arq,x[i].cep );
    for (i = 0; i <strlen(x[i].cargo); i++)
    fprintf(arq,  x[i].cargo);
    for (i = 0; i <10; i++)
    fprintf(arq, "valor: R$", x[i].salario);
    //*/
    fclose(arq);
    return 0;
}

@Simon Viegas Por enquanto eu tentei gravar só o nome e a idade, depois quero gravar o resto que esta no comentário

adicionado 5 minutos depois

@devair1010  @Simon Viegas  Ué funcionou...haha, o que o Devair falou 

 

Agora gravou, agora vou tentar colocar as outras funções, obrigada gente ;) 

arq txt-> SILVA COSTA ;  paula ;  22 

adicionado 7 minutos depois

@devair1010 e com float ? também é assim ? com "%f"

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