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

problemas com o NULL e memset


Katsumi

Pergunta

oi, pessoal, fiz esse programa, um pouco longo, mas to tendo problemas com o NULL e o memset. O compilador da erro. alguém pode identificar o erro? vlw

#include <stdio.h>

#include <string.h>
#include <stdlib.h>
#define m 347
#define hash (k+i)%m
int pesquisa_de_chave (int *v, int chave){//retorna a posicao da chave no vetor quando bem sucedido
int inf, sup, meio;
for(sup=0;(v)!=(NULL);sup++) //procurando chave
sup--;
for(inf=0;inf<=sup;inf++, sup--){
meio=(inf+sup)/2;
if(chave==(v[meio])) return(meio);
if(chave<meio) sup=(meio--);
if(chave>meio) inf=(meio++);
return(0);
}
}
int busca(){
FILE *fp;
char s, *str=&s, ch;
int i, aux=1, var;
for(var=0;var==0;){
while(aux!=0){
printf("Qual contato deseja pesquisar?\n(Deve ter no minimo os 7 primeiros caracteres)\n(Ele irá exibir apenas o primeiro contato correspondente.)\n");
scanf("%s", str);
for(i=0;str!=(NULL);i++)
if(i>7) aux=0;//e sai do loop
}
printf("\n\n\nPesquisando...\n\n\n");
aux=verificacao_busca(*str);//não zero é busca bem sucedida, zero erro.
if(aux!=0){ var=1; printf("busca bem-sucedida\n");}
else { var=0; printf("erro de busca. verifique o nome do contato e tente novamente.\n");}
}
fp=fopen("buscaAgenda.txt","r");
for(i=1;i<aux,(ch=fgetc(fp))!= EOF) if(ch=='\n') i++; //deslocou ponteiro para o inicio da linha desejada
for(i=0;i<3,(ch=fgetc(fp))!= EOF;i++)//saltando +3 casas correspondentes aos caracteres-chave
str=&s;
fscanf(fp,"%s", str);//copiando string com o contato
printf("contato: ");
for(i=0;str!=NULL;i++) printf("%c",str);
printf("\n");
return(0);
}
int verificacao_busca(char *str){
FILE *fp;
int k, i_hash, chave, i, aux, v, *v_busca=&v, aux1, aux2, aux3, saida;
char ch, *s;
for(i=0, k=0;str<7;i++) k=k+str;
fp=fopen("buscaAgenda.txt","r");
while((ch=fgetc(fp))!= EOF){//criando um vetor com as chaves
if(ch=='\n'){
fscanf(fp,"%c%c%c", &aux1, &aux2, &aux3);
*v_busca=(aux1*100+aux2*10+aux3)-5328;//5328=48*100+48*10+48; 48=0-->ASCII
v_busca++;
}
}
close(fp);
v_busca=&v;
for(i_hash=0, aux=0;aux==0;i_hash++){//aumenta a variavel i do hash, caso não seja a chave correta
chave=hash;
aux=pesquisa_de_chave(v_busca, chave);
if(aux!=0){//se a chave existe
saida=aux;
fp=fopen("buscaAgenda.txt","r");
for(i=1;i<aux,(ch=fgetc(fp))!= EOF) if(ch=='\n') i++; //deslocou ponteiro para o inicio da linha desejada
for(i=0;i<3,(ch=fgetc(fp))!= EOF;i++)//saltando +3 casas correspondentes aos caracteres-chave
fscanf(fp,"%s", s);
for(i=0;str!=NULL;i++) if(str!=s) aux=0;
}
else {
close(fp);
return(0);
}
}
close(fp);
return(saida);
}
int verificacao_inserir (int chave){//retorna 0 se a chave existe, 1 se não existe
FILE *fp;
int v, *v_inserir=&v, aux1, aux2, aux3;
char ch;
fp=fopen("insercaoAgenda.txt","r");
while((ch=fgetc(fp))!= EOF){//criando um vetor com as chaves
if(ch=='\n'){
fscanf(fp,"%c%c%c", &aux1, &aux2, &aux3);
*v_inserir=(aux1*100+aux2*10+aux3)-5328;//5328=48*100+48*10+48; 48=0-->ASCII
v_inserir++;
}
}
close(fp);
v_inserir=&v;
return( pesquisa_de_chave(v_inserir, chave));
}
int insercao (){
FILE *fp;
int aux, i, k, chave, a1, a2, a3;
char *s, *str, c;
aux=1;
while(aux!=0){
printf("Digite o novo contato a ser inserido./n formato: 'nome_contato','numero_contato(9 digitos)' \n");
scanf("%s", str);
for (i=0;str!=',';i++)
i++;
for (aux=0;str!='\0';i++){
if(str>=48&&str<=57) aux++;
}
if(aux==9)aux=0;
else printf("O numero do seu contato não contem 9 digitos.\nErro ao registrar contato.\n\n\n");
}
for(i=0,k=0;i<7;i++) k=k+str;
for(i=0, aux=0;i<347&&aux!=0;i++){ //aux sera o retorno de chave ocupada(0) ou vazia(não 0)
chave=hash;
aux=verificacao_inserir(chave);
}
if(i>=347) return(i);//passando daqui, a chave esta definida
fp = fopen("insercaoAgenda.txt","w");
rewind(fp);
for(i=1;i<aux;) while(c=fgetc(fp))!=EOF) if(c=='\n') i++;//aqui ele se posiciona na primeira casa da linha desejada para inserir o contato
a1=chave/100; chave=chave-(a1*100); //a1 algarismo centena
a2=chave/10; chave=chave-(a2*10); //a2 dezena
a3=chave; //unidade
*s=a1+48; s++;
*s=a2+48; s++;
*s=a3+48; s++;
for(i=0;str!=(NULL);i++) s=str; //'s' passa a ser a string a ser inserida
fputs(s,fp);//escrevendo nova linha no arquivo
close(fp);
return(0);
}
int remocao(){
FILE *fp;
int var, aux, i;
char lixo, c;
for(aux=0;aux==0;){
printf("\n\n\nPesquise o contato para remover.\n\n\n");
var=busca_remocao();//utilizando o método busca para exibir o contato desejado a apagar.
for(aux=0;aux==0;){
printf("\nÉ este contato que deseja apagar?\ns/n\n");
scanf("%c", &lixo);
if(lixo=='s'||lixo=='n') aux=1;
}
if(lixo=='s')aux=1;
else aux=0;
}//saindo do loop, o objeto e sua posicao estao definidos
fp=fopen("remocaoAgenda.txt","w");
for(i=0;i<var;) while(c=fgetc(fp))!=EOF) if(c='\n') i++;//movendo ponteiro para o primeiro caractere do contato a remover
for(;c!='\n';c=fgetc(fp)) memset(fp, NULL, (sizeof(char)));//substituindo os caracteres um por um por NULL ate antes de '\n'
memset(fp, (NULL), (sizeof(char)));//apagando o '\n' e eliminando a linha
return(1);
}
int busca_remocao(){
FILE *fp;
char s, *str=&s, ch;
int i, aux=1, var;
for(var=0;var==0;){
while(aux!=0){
printf("Qual contato deseja pesquisar?\n(Deve ter no minimo os 7 primeiros caracteres)\n(Ele irá exibir apenas o primeiro contato correspondente.)\n");
scanf("%s", str);
for(i=0;str!=(NULL);i++)
if(i>7) aux=0;//e sai do loop
}
printf("\n\n\nPesquisando...\n\n\n");
aux=verificacao_busca_remocao(*str);//não zero é busca bem sucedida, zero erro.
if(aux!=0){ var=1; printf("busca bem-sucedida\n");}
else { var=0; printf("erro de busca. verifique o nome do contato e tente novamente.\n");}
}
fp=fopen("remocaoAgenda.txt","r");
for(i=1;i<aux,(ch=fgetc(fp))!= EOF) if(ch=='\n') i++; //deslocou ponteiro para o inicio da linha desejada
for(i=0;i<3,(ch=fgetc(fp))!= EOF;i++)//saltando +3 casas correspondentes aos caracteres-chave
str=&s;
fscanf(fp,"%s", str);//copiando string com o contato
printf("contato: ");
for(i=0;str!=NULL;i++) printf("%c",str);
printf("\n");
return(aux);
}
int verificacao_busca_remocao(char *str){
FILE *fp;
int k, i_hash, chave, i, aux, v, *v_busca=&v, aux1, aux2, aux3, saida;
char ch, *s;
for(i=0, k=0;str<7;i++) k=k+str;
fp=fopen("remocaoAgenda.txt","r");
while((ch=fgetc(fp))!= EOF){//criando um vetor com as chaves
if(ch=='\n'){
fscanf(fp,"%c%c%c", &aux1, &aux2, &aux3);
*v_busca=(aux1*100+aux2*10+aux3)-5328;//5328=48*100+48*10+48; 48=0-->ASCII
v_busca++;
}
}
close(fp);
v_busca=&v;
for(i_hash=0, aux=0;aux==0;i_hash++){//aumenta a variavel i do hash, caso não seja a chave correta
chave=hash;
aux=pesquisa_de_chave(v_busca, chave);
if(aux!=0){//se a chave existe
saida=aux;
fp=fopen("remocaoAgenda.txt","r");
for(i=1;i<aux,(ch=fgetc(fp))!= EOF) if(ch=='\n') i++; //deslocou ponteiro para o inicio da linha desejada
for(i=0;i<3,(ch=fgetc(fp))!= EOF;i++)//saltando +3 casas correspondentes aos caracteres-chave
fscanf(fp,"%s", s);
for(i=0;str!=NULL;i++) if(str!=s) aux=0;
}
else {
close(fp);
return(0);
}
}
close(fp);
return(saida);
}
int main() {
FILE *fp;
char str[10], str1[6]="busca", str2[9]="insercao", str3[8]="remocao", ch;
int k, aux=1, i, loop;
printf("Bem vindo a agenda. \n\nO que gostaria de fazer?\n");
while(loop!=0){//loop para reexecutar programa
while (aux!=0){
printf("\npara buscar contatos na agenda digite 'busca'\n;");
printf("para inserir contatos na agenda digite 'insercao';\n");
printf("para remover contatos da agenda digite 'remocao'.\n");
scanf(" %s", str);
aux = strcmp(str, str1);
if (aux!=0) aux = strcmp(str, str2);
if (aux!=0) aux = strcmp(str, str3);
if (aux!=0) printf("\nCodigo não identificado. \nVerifique se o codigo esta correto e digite novamente:\n");
}
printf("Voce optou pelo comando %s\n", str);
//busca
if (strcmp(str, str1)== 0) {
aux=busca();
printf("\n\n\npara continuar digite qualquer caractere\n\n\n");
scanf("%c", &ch);
}
//insercao
if (strcmp(str, str2) == 0) {
aux=insercao();
if(aux==0) printf("Novo contato inserido com sucesso.\n%s", str);
if(aux!=0) printf("Falha ao registrar novo contato.\n");
}
//remocao
if (strcmp(str, str3) == 0) {
aux=remocao();
if(aux==0)orintf("Falha na remocao.\n");
if (aux!=0)printf("Contato removido com sucesso.\n");
}
printf("\n\n\nDeseja realizar outra operacao?\n");
ch=' ';
while(ch!='s'&&ch!='n')printf("s/n\n");
if(ch='s')aux=1;
else aux=0;
}
return(0);
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...