Ir ao conteúdo
  • Cadastre-se

Arquivos


Posts recomendados

O programa abaixo roda certinho, o problema é que a SAÍDA tem sido:

 

Digite um caracter:  w

  Gravação Efetuada com SUCESSO !!!

 

Digite um caracter:                                                // É aqui o PROBLEMA, deveria ir direto para a próxima pedida de caracter. Não sei porque tá saindo assim

  Gravação Efetuada com SUCESSO !!!  

 

Digite um caracter:  b

  Gravação Efetuada com SUCESSO !!!

 

e assim sucessivamente. Entre uma pedida de caractere e outra, aparece esse Digite e a resposta, como se eu já tivesse digitado algum caractere 

   

/* Elabore um programa que realizade a operação de abertura do arquivo, verificação de erro, leitura de um caractere e fechamento de arquivo. A leitura de caractere é realizada até que seja digitado os caracteres 'f' ou 'F' */

 

#include <stdio.h>
#include <locale.h>                          // biblioteca de local usada para chamar a setclocale no codigo

 

int main (void)
{
    FILE *arq;                               // declaração do tipo ARQUIVO
    char letra;

 

    arq = fopen ("C:\\arquivo.txt", "w");    // cria e abre um arquivo texto com permissão de ESCRITA

 

    if (arq == NULL)
    {
        printf ("\n O arquivo NÃO foi aberto. Ocorreu um ERRO !!!\n");
    }
    else
    {
        printf ("Digite um caractere: ");
        scanf ("%c", &letra);                        // leitura de um caractere

 

        while ((letra != 'f') && (letra != 'F'))
        {
            fputc (letra,arq);               // escrita de um caracter em um arquivo

 

            if (ferror (arq))
            {
                printf ("\n ERRO de GRAVACAO !!!\n");
            }
            else
            {
                printf ("\n Gravacao EFETUADA com SUCESSO !!!\n");
            }

 

            printf ("\nDigite um caractere: ");
            scanf ("%c", &letra);
        }
    }

 

    fclose (arq);                           // fecha o arquivo

 

}
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Wagner Candido      esse erro é por causa da entrada de dados que por algum motivo pega o restante de dados que ficam no buffer do teclado, então para resolver você pode usar a função fflush ( stdin) que faz uma limpeza no buffer  e então os comandos scanf gets e getch passam a funcionar bem ,  mas em alguns casos ( raros ) não resolvem.

      então aqui :

 printf ("Digite um caractere: ");
 scanf ("%c", &letra);                        // leitura de um caractere
 

você coloca o fflush assim:

 printf ("Digite um caractere: ");
 fflush ( stdin ) ;
 scanf ("%c", &letra);                        // leitura de um caractere
 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

@Jhonatan Dias     você quer excluir um dado no arquivo ?                Suponho que este dado seja uma palavra, ou se for duas palavras você precisará colocar mais um if para comparar a outra palavra e então você pode usar um código semelhante a este aqui :

#include <stdio.h>
#include <string.h>
#include <windows.h>
char ch[10];
int r;
FILE *arq,*arq2, *arq3;
int main(){
    /*essas três linhas a seguir se refere ao arquivo que você tem com os dados*/
    arq=fopen("meu_arquivo.txt","wt");
    fprintf(arq,"escrevendo qualquer coisa e mais alguma coisa sua senha seu login");
    fclose(arq);
    /*deixando elas você vê como funciona, mas quando for usar não precisa delas*/
    arq=fopen("meu_arquivo.txt","r");
    arq2=fopen("meu_arquivo2.txt","wt");
    while(fscanf(arq,"%s",&ch)!=EOF){
        r=strcmp(ch,"qualquer");/*aqui é o dado,que esta entre aspas, para excluir*/
        if(r!=0){
            fprintf(arq2,ch);fprintf(arq2," ");
        }
    }
    fclose(arq2);
    fclose(arq);
    remove("meu_arquivo.txt");
    arq2=fopen("meu_arquivo2.txt","r");
    arq=fopen("meu_arquivo.txt","wt");
    while(fscanf(arq2,"%s",&ch)!=EOF){
        fprintf(arq,ch);fprintf(arq," ");
    }
    fclose(arq2);
    fclose(arq);
    remove("meu_arquivo2.txt");
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

15 horas atrás, devair1010 disse:

@Jhonatan Dias     você quer excluir um dado no arquivo ?                Suponho que este dado seja uma palavra, ou se for duas palavras você precisará colocar mais um if para comparar a outra palavra e então você pode usar um código semelhante a este aqui :


#include <stdio.h>
#include <string.h>
#include <windows.h>
char ch[10];
int r;
FILE *arq,*arq2, *arq3;
int main(){
    /*essas três linhas a seguir se refere ao arquivo que você tem com os dados*/
    arq=fopen("meu_arquivo.txt","wt");
    fprintf(arq,"escrevendo qualquer coisa e mais alguma coisa sua senha seu login");
    fclose(arq);
    /*deixando elas você vê como funciona, mas quando for usar não precisa delas*/
    arq=fopen("meu_arquivo.txt","r");
    arq2=fopen("meu_arquivo2.txt","wt");
    while(fscanf(arq,"%s",&ch)!=EOF){
        r=strcmp(ch,"qualquer");/*aqui é o dado,que esta entre aspas, para excluir*/
        if(r!=0){
            fprintf(arq2,ch);fprintf(arq2," ");
        }
    }
    fclose(arq2);
    fclose(arq);
    remove("meu_arquivo.txt");
    arq2=fopen("meu_arquivo2.txt","r");
    arq=fopen("meu_arquivo.txt","wt");
    while(fscanf(arq2,"%s",&ch)!=EOF){
        fprintf(arq,ch);fprintf(arq," ");
    }
    fclose(arq2);
    fclose(arq);
    remove("meu_arquivo2.txt");
    return 0;
}

 

Boa tarde.

 

Cara, pelo que entendi isso vai excluir o "arquivo.txt" correto ?

eu preciso apagar um dado que gravei dentro dele. um exemplo de cadastro.

Aqui está a função.

 

typedef struct{
    char nome[30];
    char CPF[50];
    char endereco[50];
    char RG[50];
    char tel[50];    
}CadastroC;

 

void cadCli(){
    FILE* arquivo;
    int opt,k;
    CadastroC c;
    
        if(arquivo == NULL){
            arquivo = fopen("Clientes.txt", "w");
            do{
            system("cls");
            cabecalhoP();
            
            printf("CADASTRO DE CLIENTE.");
            fflush(stdin);
            printf("\n\nNome: ");
            gets(c.nome);
            fflush(stdin);
            printf("CPF: ");
            gets(c.CPF);
            //scanf("%ld",&c.CPF);
            fflush(stdin);
            printf("RG: ");
            gets(c.RG);
            //scanf("%ld",&c.RG);
            fflush(stdin);
            printf("Endereço: ");
            gets(c.endereco);
            fflush(stdin);
            printf("Telefone: ");
            scanf("%s",&c.tel);
            
            system("cls");
            cabecalhoP();
        
                printf("CONFIRMARÇÃO DE CADASTRO.");        
                printf("\n\nNome: %s",c.nome);
                printf("\nCPF: %s",c.CPF);
                printf("\nRG: %s",c.RG);
                printf("\nEndereço: %s",c.endereco);
                printf("\nTelefone: %s\n",c.tel);
                
                printf("\nDeseja salvar os dados ?");
                printf("\n1 - Sim.\n2 - Não.");
                printf("\nOpção: ");
                scanf("%d",&k);
        
                    if(k==1){
                        fwrite(&c, sizeof(CadastroC),1,arquivo);
                        printf("\nCliente cadastrado com sucesso.\n");
                        system("PAUSE");
                    }else{
                        printf("\nDados excluídos.\n");
                        system("PAUSE");
                    }                
            
                printf("\nDeseja continuar cadastrando ?");
                printf("\n1 - Sim.");
                printf("\n2 - Não.");
                printf("\nOpção: ");
                scanf("%d", &opt);
                    
                    }while(opt==1);
            fclose(arquivo);
    
        system("cls");
        getchar();
        
}            
        else{
            arquivo = fopen("Clientes.txt", "a");
                do{
                system("cls");
                cabecalhoP();
                
                printf("CADASTRO DE CLIENTE.");
                fflush(stdin);
                printf("\n\nNome: ");
                gets(c.nome);
                fflush(stdin);
                printf("CPF: ");
                gets(c.CPF);
                //scanf("%ld",&c.CPF);
                fflush(stdin);
                printf("RG: ");
                gets(c.RG);
                //scanf("%ld",&c.RG);
                fflush(stdin);
                printf("Endereço: ");
                gets(c.endereco);
                fflush(stdin);
                printf("Telefone: ");
                scanf("%s",&c.tel);
                
                system("cls");
                cabecalhoP();
            
                    printf("CONFIRMARÇÃO DE CADASTRO.");        
                    printf("\n\nNome: %s",c.nome);
                    printf("\nCPF: %s",c.CPF);
                    printf("\nRG: %s",c.RG);
                    printf("\nEndereço: %s",c.endereco);
                    printf("\nTelefone: %s\n",c.tel);
                    
                    printf("\nDeseja salvar os dados ?");
                    printf("\n1 - Sim.\n2 - Não.");
                    printf("\nOpção: ");
                    scanf("%d",&k);
            
                        if(k==1){
                            fwrite(&c, sizeof(CadastroC),1,arquivo);
                            printf("\nCliente cadastrado com sucesso.\n");
                            system("PAUSE");
                        }else{
                            printf("\nDados excluídos.\n");
                            system("PAUSE");
                        }                
                
                    printf("\nDeseja continuar cadastrando ?");
                    printf("\n1 - Sim.");
                    printf("\n2 - Não.");
                    printf("\nOpção: ");
                    scanf("%d", &opt);
                        }while(opt==1);
            
                fclose(arquivo);
        
            system("cls");
            getchar();
    }}
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Jhonatan Dias     não, não está correto, isso não vai excluir o arquivo não, apenas o dado que no código está entre aspas, e que você quer excluir será excluído porque o arquivo será todo copiado menos o dado que você quer excluir e então o arquivo será excluído e logo em seguida criado novamente com os todos os dados, menos o que você excluiu.   

  veja como ficaria seu código com essa função de excluir, com ele você exclui uma palavra do arquivo salvo, mas se você quer excluir um  cadastro inteiro então é de outra maneira.  testa esse código aí e depois de rodar ele abra com o bloco de notas e veja que a palavra que você excluiu não estará no arquivo :

#include <stdio.h>
#include <conio.h>
typedef struct{
    char nome[30];
    char CPF[50];
    char endereco[50];
    char RG[50];
    char tel[50];
}CadastroC;
FILE *arquivo,*arq2;
int r;
void cabecalhoP(){

}
void excluir(){
    char ch[30],opcao[30];
    arquivo=fopen("clientes.txt","r");
    arq2=fopen("meu_arquivo2.txt","wt");
    printf("Digite a Palavra Que Quer Excluir");
    scanf("%s",opcao);/*aqui é o dado para excluir*/
    while(fscanf(arquivo,"%s",&ch)!=EOF){
        r=strcmp(ch,opcao);
        if(r!=0){
            fprintf(arq2,ch);fprintf(arq2," ");
        }
    }
    fclose(arq2);
    fclose(arquivo);
    remove("clientes.txt");
    arq2=fopen("meu_arquivo2.txt","r");
    arquivo=fopen("clientes.txt","wt");
    while(fscanf(arq2,"%s",&ch)!=EOF){
        fprintf(arquivo,ch);fprintf(arquivo," ");
    }
    fclose(arq2);
    fclose(arquivo);
    remove("meu_arquivo2.txt");
}

void cadCli(){
    FILE* arquivo;
    int opt,k;
    CadastroC c;

        if(arquivo == NULL){
            arquivo = fopen("Clientes.txt", "w");
            do{
            system("cls");
            cabecalhoP();

            printf("CADASTRO DE CLIENTE.");
            fflush(stdin);
            printf("\n\nNome: ");
            gets(c.nome);
            fflush(stdin);
            printf("CPF: ");
            gets(c.CPF);
            /*//scanf("%ld",&c.CPF);*/
            fflush(stdin);
            printf("RG: ");
            gets(c.RG);
            /*//scanf("%ld",&c.RG);*/
            fflush(stdin);
            printf("Endereço: ");
            gets(c.endereco);
            fflush(stdin);
            printf("Telefone: ");
            scanf("%s",&c.tel);

            system("cls");
            cabecalhoP();

                printf("CONFIRMARÇÃO DE CADASTRO.");
                printf("\n\nNome: %s",c.nome);
                printf("\nCPF: %s",c.CPF);
                printf("\nRG: %s",c.RG);
                printf("\nEndereço: %s",c.endereco);
                printf("\nTelefone: %s\n",c.tel);

                printf("\nDeseja salvar os dados ?");
                printf("\n1 - Sim.\n2 - Não.");
                printf("\nOpção: ");
                scanf("%d",&k);

                    if(k==1){
                        fwrite(&c, sizeof(CadastroC),1,arquivo);
                        printf("\nCliente cadastrado com sucesso.\n");
                        system("PAUSE");
                    }else{
                        printf("\nDados excluídos.\n");
                        system("PAUSE");
                    }

                printf("\nDeseja continuar cadastrando ?");
                printf("\n1 - Sim.");
                printf("\n2 - Não.");
                printf("\nOpção: ");
                scanf("%d", &opt);

                    }while(opt==1);
            fclose(arquivo);

        system("cls");
        getchar();

}
        else{
            arquivo = fopen("Clientes.txt", "wt");
                do{
                system("cls");
                cabecalhoP();

                printf("CADASTRO DE CLIENTE.");
                fflush(stdin);
                printf("\n\nNome: ");
                gets(c.nome);
                fflush(stdin);
                printf("CPF: ");
                gets(c.CPF);
                /*//scanf("%ld",&c.CPF);*/
                fflush(stdin);
                printf("RG: ");
                gets(c.RG);
               /* //scanf("%ld",&c.RG);*/
                fflush(stdin);
                printf("Endereço: ");
                gets(c.endereco);
                fflush(stdin);
                printf("Telefone: ");
                scanf("%s",&c.tel);

                system("cls");
                cabecalhoP();

                    printf("CONFIRMARÇÃO DE CADASTRO.");
                    printf("\n\nNome: %s",c.nome);
                    printf("\nCPF: %s",c.CPF);
                    printf("\nRG: %s",c.RG);
                    printf("\nEndereço: %s",c.endereco);
                    printf("\nTelefone: %s\n",c.tel);

                    printf("\nDeseja salvar os dados ?");
                    printf("\n1 - Sim.\n2 - Não.");
                    printf("\nOpção: ");
                    scanf("%d",&k);

                        if(k==1){
                            fprintf(arquivo,c.nome);fprintf(arquivo," ");
                            fprintf(arquivo,c.CPF );fprintf(arquivo," ");
                            fprintf(arquivo,c.RG  );fprintf(arquivo," ");
                            fprintf(arquivo,c.endereco);fprintf(arquivo," ");
                            fprintf(arquivo,c.tel );fprintf(arquivo," ");

                            /*fwrite(&c, sizeof(CadastroC),1,arquivo);*/
                            printf("\nCliente cadastrado com sucesso.\n");
                            system("PAUSE");
                        }else{
                            printf("\nDados excluídos.\n");
                            system("PAUSE");
                        }

                    printf("\nDeseja continuar cadastrando ?");
                    printf("\n1 - Sim.");
                    printf("\n2 - Não.");
                    printf("\nOpção: ");
                    scanf("%d", &opt);
                        }while(opt==1);

                fclose(arquivo);

            system("cls");
            getchar();
    }}
int main(){
    FILE *arquivo;
    int op;
    do{
        system("cls");
        printf("1- cadastrar\n");
        printf("2- excluir\n");
        printf("3-sair\n");
        printf("    ");
        scanf("%d",&op);
        switch(op){
            case 1:
                cadCli();
                break;
            case 2:
                excluir();
                break;
        }
    }while(op!=3);
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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