Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Wagner Candido

Arquivos

Recommended Posts

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

 

}
 

Editado por Wagner Candido
  • Curtir 1

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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;
}

 

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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);
}

 

Editado por devair1010
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×