Ir para conteúdo

Arquivado

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

Asskiller

Problema com Loop Dentro do Arquivo

Recommended Posts

/*
Devido ao alto índice de violência que tem acontecido no Rio de Janeiro, e visando melhorar a sua estratégia de trabalho,
uma empresa de segurança faz constantemente um levantamento de casos de violência registrados diariamente.
Esta empresa armazena em um arquivo binário as informações de todos os tipos de violência registrados.
Cada registro deste arquivo é composto pelos seguintes campos:

 Código do tipo de violência (inteiro)
 Descrição da violência (string de 100 posições)
 Número de casos ocorridos (inteiro)

a) Faça uma função chamada le_casos(), que deve ler os dados do arquivo
b) Faça uma função chamada busca_casos(), para realizar a busca de um código de tipo de violência no arquivo e
exibir na tela o total de violências ocorridas deste tipo
c) Faça uma função grava_casos(), que gera o arquivo
d) Gerar um segundo arquivo com a situação atual na cidade considerando existir, no máximo, 10 diferentes tipos de códigos.

Neste arquivo, serão gravados o código com a respectiva totalização de cada um
Fazer chamada as funções criadas.*/

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>



using namespace System;
void menu();
void lecasos();
void grava();

    struct Case{
        int violencia;
        char violenciadr;
        int casos;
    }criador;

    FILE *fp; // 1 arquivo
    FILE *fp2; // letra d 2 arquivo

    int violencia;
    int casos;
    char violenciadr;
    int select;

int main(array<System::String ^> ^args)
{  
    menu();
    switch(select){
        case 1:   
        lecasos();
        break;
        case 2:
        break;
        case 3:
            grava();
        break;
        case 4:
            printf("Saindo...\n");
            exit;
       break;
        default:
            printf("Opacao Invalida - Utilize o Menu");
            menu();
    }while(select != 4);

    system("pause");
    return 0;
}

void menu(){
  printf("|------------------------------------------------|\n");
  printf("| 1 - Ler Casos                                  |\n");
  printf("| 2 - Buscar Casos                               |\n");
  printf("| 3 - Gravar Casos                               |\n");
  printf("| 4 - Sair                                       |\n");
  printf("|------------------------------------------------|\n");
      printf("Entre com a Opcao :\n");
    scanf("%d",&select);
}

void grava(){
    fp = fopen("casos.bin","wb");
    if(!fp){
     puts("Erro ao criar o arquivo");
     exit(0);
    }
    puts("Insira o Numero do Codigo para o Caso:");
    scanf("%d",&criador.casos);
    while(criador.casos !=0){                 
 puts("Digite o codigo para o tipo da violencia:");
 scanf("%d",&criador.violencia);
 puts("Digite a descricao da violencia:");                     
 scanf("%s",&criador.violenciadr);  
 criador.violenciadr=toupper(criador.violenciadr);  
 fflush(stdin);
 fwrite(&criador,sizeof(struct Case),1,fp);
 puts("Digite o numero de casos diferente de 0:");                     
 scanf("%d",&criador.casos);    
}
fclose(fp);
}

void lecasos(){
    int i;
    fp = fopen("casos.bin","rb");
    if(!fp){
     puts("Erro ao criar o arquivo");
     exit(0);
    }
 fread(&criador,sizeof(struct Case),1,fp);
 printf("Exibir Dados:\n");
 while(!feof(fp)){
      // tentei iniciar um loop para mostrar tudo , porem deu erro..... como eu mostro esse bloco de informaçoes para o usuario ?
                        violencia = criador.violencia;
                        casos=criador.casos;
                        violenciadr = criador.violenciadr;
                        fread(&criador,sizeof(struct Case),1,fp);
                        printf("Violencias: %d Codigos : %d Descrição das Violencias:%s",violencia,casos,violenciadr);
                        }
                       fclose(fp);                    
                  }
                   

Meu problema esta identado dentro do codigo....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está sendo pedido um array de tamanho 100 na descrição do tipo de violência. Agora, veja a sua estrutura:

 

struct Case{
        int violencia;
        char violenciadr;
        int casos;
    }criador;

 

Corrija este erro primeiramente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigido , porem ainda estou com problemas quanto a inicializacao na tela do programa , do que foi armazenado pela opcao 3.

 

Se possivel dar uma explicacao sobre qual funcao utilizar para realizar e qual estrutura de repeticao usar..

Preciso entender a logica da busca , entendo que e por meio de um Loop utilizando os comandos e arquivo e imprimindo com printf..

 

 


/*
Devido ao alto índice de violência que tem acontecido no Rio de Janeiro, e visando melhorar a sua estratégia de trabalho,
uma empresa de segurança faz constantemente um levantamento de casos de violência registrados diariamente.
Esta empresa armazena em um arquivo binário as informações de todos os tipos de violência registrados.
Cada registro deste arquivo é composto pelos seguintes campos:

 Código do tipo de violência (inteiro)
 Descrição da violência (string de 100 posições)
 Número de casos ocorridos (inteiro)

a) Faça uma função chamada le_casos(), que deve ler os dados do arquivo
b) Faça uma função chamada busca_casos(), para realizar a busca de um código de tipo de violência no arquivo e
exibir na tela o total de violências ocorridas deste tipo
c) Faça uma função grava_casos(), que gera o arquivo
d) Gerar um segundo arquivo com a situação atual na cidade considerando existir, no máximo, 10 diferentes tipos de códigos.

Neste arquivo, serão gravados o código com a respectiva totalização de cada um
Fazer chamada as funções criadas.*/

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>



using namespace System;
void menu();
void lecasos();
void grava();

    struct Case{
        int violencia;
        char violenciadr[100];
        int casos;
    }criador;

    FILE *fp; // 1 arquivo
    FILE *fp2; // letra d 2 arquivo

    int violencia;
    int casos;
    char violenciadr[100];
    int select;

int main(array<System::String ^> ^args)
{  
    menu();
    switch(select){
        case 1:   
        lecasos();
        break;
        case 2:
        break;
        case 3:
            grava();
        break;
        case 4:
            printf("Saindo...\n");
            exit;
       break;
        default:
            printf("Opacao Invalida - Utilize o Menu");
            menu();
    }while(select != 4);

    system("pause");
    return 0;
}

void menu(){
  printf("|------------------------------------------------|\n");
  printf("| 1 - Ler Casos                                  |\n");
  printf("| 2 - Buscar Casos                               |\n");
  printf("| 3 - Gravar Casos                               |\n");
  printf("| 4 - Sair                                       |\n");
  printf("|------------------------------------------------|\n");
      printf("Entre com a Opcao :\n");
    scanf("%d",&select);
}

void grava(){
    fp = fopen("casos.bin","wb");
    if(!fp){
     puts("Erro ao criar o arquivo");
     exit(0);
    }
    puts("Insira o Numero do Codigo para o Caso:");
    scanf("%d",&criador.casos);
    while(criador.casos !=0){                 
 puts("Digite o codigo para o tipo da violencia:");
 scanf("%d",&criador.violencia);
 puts("Digite a descricao da violencia:");                     
 scanf("%s",&criador.violenciadr);  
 criador.violenciadr[100]=toupper(criador.violenciadr[100]);  
 fflush(stdin);
 fwrite(&criador,sizeof(struct Case),1,fp);
 puts("Digite o numero de casos diferente de 0:");                     
 scanf("%d",&criador.casos);    
 if(criador.casos ==0){
     system("cls");
     menu();
 }
}
fclose(fp);
}

void lecasos(){
    int i;
    fp = fopen("casos.bin","rb");
    if(!fp){
     puts("Erro ao criar o arquivo");
     exit(0);
    }
 fread(&criador,sizeof(struct Case),1,fp);
 printf("Exibir Dados:\n");
 while(!feof(fp)){
                        for(i=0; i < criador.casos;i++){
      // tentei iniciar um loop para mostrar tudo , porem deu erro..... como eu mostro esse bloco de informaçoes para o usuario ?
                        violencia = criador.violencia;
                        casos=criador.casos;
                        violenciadr[100] = criador.violenciadr[100];
                        
                        fread(&criador,sizeof(struct Case),1,fp);
                        printf("Violencias: %d Codigos : %d Descrição das Violencias:%s",violencia,casos,violenciadr);
                        }
 }
                       fclose(fp);                    
                  }
                    

 



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.