Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Oi, estou fazendo um sistema de locadora de carros pra um projeto de faculdade em C, mas estou tendo problemas em uma parte. Meu código ele registra carros e os localiza quando disponíveis, e no arquivo carros.txt os dados ficam organizados dessa maneira:
1 XXX1234 Gol 120
0 YYY1234 Corsa 110
O 1 e 0 no começo pra determinar disponível ou indisponível
O XXX1234 é a placa do carro
Logo depois da placa vem o modelo do carro
E no final é o valor da diaria de cada carro, sendo o gol 120 reais por dia e o corsa 110 reais por dia.
Eu gostaria de saber, entre todos os carros, como eu poderia por exemplo, digamos que alugaram o gol, como eu faço pro meu sistema localizar o Gol, e modificar o 1 pra 0. Não estou conseguindo achar os comandos q fazem essa busca e alteração. Se alguem puder me ajudar, agradeço muitíssimo. Obrigado pelo seu tempo!
>
3 minutos atrás, _Isis_ disse:
você precisa ser do arquivo,alterar em memória e gravar antes de sair do programa.
http://en.cppreference.com/w/c
Sim, eu estou tentando com o fseek, mas o fseek ele exige q você mova ele por colunas e letras, mas eu queria que ele setasse a partir do momento que ele encontrasse a informação, porque eu não vou saber com exatidão onde estará o carro na lista.
Tem como eu localizar a placa? Por exemplo, a pessoa digita a placa do carro que quer alugar, e eu use o fseek pra procurar em específico a placa, e volte uma informação pra alterar o 1 pra 0?
você não entendeu. Leia o arquivo inteiro em memória no início do programa. Todas as operações de aluguel são feitas em memória primeiro e só depois você escreve em arquivo tudo o que está em memória sobrescrevendo o conteúdo do arquivo.
Também dá pra mapear o arquivo em memória, mas é mais complicado:
https://en.wikipedia.org/wiki/Memory-mapped_file
https://stackoverflow.com/questions/8411709/memory-mapped-files
https://www.gnu.org/software/libc/manual/html_node/Memory_002dmapped-I_002fO.html
Se você estiver usando um ambiente específico, tipo POSIX, dá pra tentar criar toda a lista de carros em memória + a informação das linhas no arquivo lendo linha por linha e processando os dados usando expressão regular.
/Antes de executar o programa abaixo pela primeira vez crie um arquivo de texto vazio chamado "carros" na mesma pasta do executavel./
#include<stdio.h>
int main(){
FILE *arquivo;
int resposta=0,diaria,totaldecarros,contacarros,i;
char nomedocarro[20],placa[8],caractere,textotemporario[1000];
while(resposta!=3){
printf("O que deseja fazer ?");
printf("\n1.Cadastrar carro");
printf("\n2.Alugar carro");
printf("\n3.Sair");
scanf("%d",&resposta);
if(resposta==1){
printf("Digite o nome do carro:");
scanf("%s",nomedocarro);
printf("Digite a placa:");
scanf("%s",placa);
printf("Digite o valor da diaria:");
scanf("%d",&diaria);
arquivo=fopen("carros.txt","a");
fprintf(arquivo,"%d ",1);
fprintf(arquivo,"%s ",placa);
fprintf(arquivo,"%s ",nomedocarro);
fprintf(arquivo,"%d\n",diaria);
fclose(arquivo);
}
else if(resposta==2){
arquivo=fopen("carros.txt","r");
totaldecarros=0;
i=0;
while(1){
caractere=
fgetc(arquivo);
if(caractere=='\n'){
printf(" %d",totaldecarros+1);
totaldecarros++;
}
if(caractere!=EOF){
printf("%c",caractere);
textotemporario[i]=caractere;
i++;
}
else{
textotemporario[i]='\0';
break;
}
}
if(!totaldecarros)
printf("Nao ha carros cadastrados.");
else{
printf("Digite o numero a direita do valor da diaria do carro que quer alugar:");
scanf("%d",&resposta);
if((resposta<1)||(resposta>totaldecarros)){
printf("Numero invalido.");
fclose(arquivo);
}
else{
fclose(arquivo);
arquivo=fopen("carros.txt","w");
i=0;
contacarros=1;
while(contacarros!=resposta){
if(textotemporario[i]=='\n')
contacarros++;
i++;
}
textotemporario[i]='0';
fprintf(arquivo,"%s",textotemporario);
fclose(arquivo);
}
if(resposta==3)
resposta=0;
}
}
}
system("pause");
}
você precisa ser do arquivo,alterar em memória e gravar antes de sair do programa.
http://en.cppreference.com/w/c