Ir para conteúdo

POWERED BY:

Arquivado

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

KaioOliveira

em Programa com arquivos

Recommended Posts

Boa Noite Pessoal, estou com um projeto e não consegui achar uma solução para um problema.

 

Primeiro meu código :

 

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

void gravatmbo()
{
 char obra[20], Autor[20], Edit[20],R;
 int Cod_area , tombo;
 FILE *cadastro; 
 cadastro = fopen("tombos.txt","a+");
 do
  {
  system("CLS");
  printf("---------------CADRASTO DE TOMBOS: ---------------\n\n");
  printf("Nome da obra: ");fflush(stdin);
  scanf("%[A-Z a-z]",obra);
  printf("Nome Do Autor: ");fflush(stdin);
  scanf("%[A-Z a-z]",Autor);
  printf("Nome Da Editora: ");fflush(stdin);
  scanf("%[A-Z a-z]",&Edit);
  printf("Cod. De Area: ");fflush(stdin);
  scanf("%d",&Cod_area);
  printf("N.Tombo: ");fflush(stdin);
  scanf("%d",&tombo);
  fprintf(cadastro, "%s\n%s\n%s\n%d\n%d\n",obra, Autor,Edit,Cod_area,tombo);
  printf("--------------------------------------------------");
  printf("\n\n");
  printf ("Deseja cadastrar outro tombo ?(S/N)? ");
  fflush(stdin);
  R = getchar();
}while ((R != 'N')&&(R != 'n'));
fclose(cadastro);
}
void gravaobra()
{
 char data[11],obra[20],R;
 int tombo ,nexemplar;
 
 FILE *cadastro; 
 cadastro = fopen("obras.txt","a+");
 do
  {
  system("CLS");
  printf("----------------CADRASTO DE OBRAS----------------\n\n");
  printf("Nome da obra: ");fflush(stdin);
  scanf("%[A-Z a-z]",obra);
  printf("Data de Compra (dd.mm.aaaa): ");fflush(stdin);
  scanf("%s",data);
  printf("N. Tombo: ");fflush(stdin);
  scanf("%d",&tombo);
  printf("N.Exemplar: ");fflush(stdin);
  scanf("%d",&nexemplar);
  fprintf(cadastro, "%s\n%s\n%d\n%d\n",obra,data,tombo,nexemplar);
  printf("-------------------------------------------------");
  printf("\n\n");
  printf ("Deseja cadastrar outra obra?(S/N)? ");fflush(stdin);
  R = getchar();
}while ((R != 'N')&&(R != 'n'));
fclose(cadastro);
}

int main(){
	
	int a;
	do{
		
		system("cls");
		puts("-----------MENU-----------");
		puts("1-CADASTRAR TOMBO");
		puts("2-CADASTRAR OBRAS");
		puts("3-MOSTRAR OBRAS POR AREA");
		puts("4-MOSTRAR OBRAS POR AUTOR");
		puts("5-MOSTRAR OBRAS POR EDITORA");
		puts("6-ENCERRAR PROGRAMA");
		puts("--------------------------");
		printf("Digite Sua Opcao: ");
		scanf("%d",&a);
		switch(a){
					case 1:gravatmbo(); break;
					case 2:gravaobra(); break;
					case 3:break;
					case 4:break;
					case 5:break;
					case 6:return 0;break;
					default:printf("Numero invalido!\n");break;
				}
 fflush(stdin);
}while(a!=6);

return 0;
}

Agora o problema, eu estou salvando os dados de cadastro em linhas separadas, há como eu escolher determinadas linhas para imprimir na tela?

Ex.: Ao cadastrar 2 tombos no programa, ele salva 5 dados para cada tombo salvo. Quando eu selecionar no menu para buscar obras por autor ele buscar apenas as linhas que contem os autores, que seriam : 2 e 7. Há alguma forma de fazer isso? Tentei mas não consegui pensar em nada :(

 

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar fseek(). Seria até mais fácil se você estivesse usando uma struct. Aí você poderia mover sizeof(nome_da_estrutura).

Para casos assim, um arquivo na forma binária é mais fácil de manipular que arquivos em texto.

 

Outra forma POG é ir fazendo vários fgets(), até chegar na linha desejada. Mas essa é mais feinha... http://forum.imasters.com.br/public/style_emoticons/default/natal_tongue.gif

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.