Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda com leitura de arquivo txt


diego bocao

Pergunta

Bem pessoal o problema é o seguinte, estou armazenando os arquivos em txt so que quando vou ler os arquivos para consultar tenho um problema:

por exemplo reservo um espaço de 20 caracteres para o sobrenome, mas quando o usuario digita o sobrenome e ele não preenche os 20 caracteres na hora de imprimir isso na tela ele puxa uma parte do proximo (no meu caso seria a data de nascimento) para preencher o espaço reservado

alguém pode me ajudar a resolver isso ?

abraços

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

void consulta (char pesq[])
{
     FILE *arquivo;
     char curs[50];
     char sobren[30],sex[10];
     int datan[12], existe=0;
     arquivo = fopen ("arquivo1.txt", "r");
     while ((fscanf(arquivo,"%s", curs))!=EOF)
     if (!strcmp(curs,pesq))
     {
        printf("\nNome: %s", curs);
     
        fgets(sobren,30,arquivo);
        printf("\nSobrenome: %s", sobren);
     
        fscanf(arquivo,"%s", &datan);
        printf("\nData de Nascimento: %s", &datan);
     
        fscanf(arquivo,"%s", &sex);
        printf("\nSexo: %s", &sex);
        fscanf(arquivo,"\n");//pula uma linha no arquivo
        existe=1;//
        }//if
        else fscanf(arquivo, "\n\n\n\n");
        if (existe==0) printf("Cadastro Inexistente!\n");
        getchar();
        fclose(arquivo);
        }//função consulta
         
        int main (void)
{ 
         FILE *arquivo;
         int menu,i;
         char nome[15], sobren[50], sex[10]; 
         int datan[12];
         
         while (menu != 4){
               system("cls");
               printf("\n\tHOTEL\n");
               printf("\n\t1 - Cadastrar Hospede.");
               printf("\n\t2 - Consultar Hospede.");
               printf("\n\t3 - Listar Nome dos Hospedes.");
               printf("\n\t4 - \tSair.");
               printf("\n\nOpcao:");
               scanf("%d",&menu);
               getchar();
               
               switch (menu){
                      case 1: {
                           printf("\nNome: ");
                           gets(nome);//ARMAZENA A VARIAVEL INTEIRA UZAR SEMPRE
                           printf("\nSobrenome: ");
                           gets(sobren);
                           fflush(stdin);
                           printf("\nData de Nascimento: ");
                           scanf("%s", &datan);
                           printf("\nSexo: ");
                           scanf("%s",&sex);
                           getchar();

                            arquivo = fopen ("arquivo1.txt", "a+");
                            
                            fprintf(arquivo, "%s ", nome);
                            fprintf(arquivo, "%s", sobren);
                            fprintf(arquivo, " %s ", datan);
                            fprintf(arquivo, "%s\n", sex);
                            printf("\n Dados Registrados com Sucesso!\n");
                            
                            fclose(arquivo);
                            getchar();
                           system ("cls");                          
                           }//case 1
                            break;
                            
                      case 2: {
                           printf("\n\t\t.::.Consulta por Nome.::.");
                           printf("\n\nDigite o nome:");
                           gets(nome);
                           consulta(nome);
                           }//case 2
                           break;
                           
                           }//switch
            }//while menu
system("pause");
}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

você tem q gravar o sobrenome ocupando 20 espacos no txt. se cada sobrenome tiver um tamanho você não vai poder adivinhar qual tem qual tamanho de cada.

em vez de usar o fgets, tenta ler primero na variavel e em gravar no txt com o fwrite: http://www.cplusplus.com/reference/clibrar...dio/fwrite.html q acho q ele alocara o espaco correto.

Link para o comentário
Compartilhar em outros sites

  • 0
você tem q gravar o sobrenome ocupando 20 espacos no txt. se cada sobrenome tiver um tamanho você não vai poder adivinhar qual tem qual tamanho de cada.

em vez de usar o fgets, tenta ler primero na variavel e em gravar no txt com o fwrite: http://www.cplusplus.com/reference/clibrar...dio/fwrite.html q acho q ele alocara o espaco correto.

mas o fwrite grava em binario ......

eu tive pensando em fazer um laço para quando o usuario bater um ENTER seje colocado algo tipo ";" ou "|" no final .. ai quando eu for efetuar a leitara pra abastecer a variavel pra imprimir na tela eu mando ele ter ate o ponto de identificação ..

Link para o comentário
Compartilhar em outros sites

  • 0
mas o fwrite grava em binario ......

quem escolhe se é em binario é você quando abre o arquivo. e mesmo q for em binario o não, ele le normal.

da uma olhada no codigo:

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

int main(void)
{
    FILE *p;
    
    char a[20], b[20];
    
    scanf("%s", a);
    scanf("%s", b);
    
    p = fopen("xxx.txt", "w");
    
    fwrite(&a, sizeof(char), 20, p);
    fwrite(&b, sizeof(char), 20, p);
    
    fclose(p);

    char c[20], d[20];    
    
    p = fopen("xxx.txt", "r");
    
    fread(&c, 20, sizeof(char), p);
    fread(&d, 20, sizeof(char), p);
    
    printf("%s\n", c);
    printf("%s\n", d);
    
    getch();
}[/code]

pode escreve qualquer coisa na hora de gravar q você vai ver q quando ele ler vai escreve a mesma coisa na tela. so daria problema se você passar de 20 caracteres, e não tiver o '\ 0' q fecha a string, mas ai é so você tratar pra isso não acontecer.

otra coisa é q se você abrir o txt você vai ver um mte de rabisco depois do '\ 0' q é o valor q vai estar na memoria quando você grava, mas isso não interfere, pois o c só le ate o '\ 0'. mas se você não quer q os rabisco aparecam no txt, vai ter q tratar a string pra arrumar isso.

ou você pode fazer tb do jeito q você falou, mas acho q daria mais trabalho.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...