Fabin Postado Março 22, 2011 Denunciar Share Postado Março 22, 2011 Bom dia pessoal!O meu problema é banal porem não sei como resolver, sempre que compilo o programa ocorre o erro:incompatible types in assignment of `char' to `char[20]' estou fazendo aos poucos meu codigo, estou fazendo as funçoes e testando. ta ai o codigo #include <stdlib.h> #include <stdio.h> typedef struct { char nome[20]; char telefone[14]; }contato; void limpar_agenda(contato x[10]); int main() { contato agenda[10]; limpar_agenda(agenda); system("pause"); return 0; } void limpar_agenda(contato x[10]) { for(int posicao=0;posicao<10;posicao++) { x[posicao].nome = ''; x[posicao].telefone = ''; } printf("Agenda Apagada!"); }vlaews pela ajuda Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CPP Postado Março 22, 2011 Denunciar Share Postado Março 22, 2011 (editado) Olá Fabin,No seu for o uso de x[posicao].nome = ' ' está incorreto, o mesmo vale pra .telefone = ' '.Isso porque um array de bytes pra ser usado assim precisa ser indexado, ou seja, você teria que ter outra variavel pra fazer:for (int a = 0; a < 20; a++) x[posicao].nome[a] = ' '; for (int b = 0; b < 14; b++) x[posicao].telefone[b] = ' '; Mas isso não é muito pratico, então você pode usar o strcpy() pra zerar suas variaveis do tipo array de bytes. strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); Também pode usar o memset() pra preencher um conteudo de memória. Eu coloquei as duas opções no seu código. qualquer dúvida fala ai. Abs #include <stdlib.h> #include <stdio.h> #include <mem.h> #include <string.h> typedef struct { char nome[20]; char telefone[14]; }contato; void limpar_agenda(contato x[10]); void limpar_agenda2(contato *x, int items); int main() { contato agenda[10]; limpar_agenda(agenda); limpar_agenda2(&agenda[0], 10); system("pause"); return 0; } void limpar_agenda(contato x[10]) { for(int posicao=0;posicao<10;posicao++) { strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); } printf("\nAgenda Apagada!\n"); } void limpar_agenda2(contato *x, int items) { memset(x, 0, sizeof(contato) * items); printf("\nAgenda Apagada!\n"); } Editado Março 22, 2011 por CPP Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fabin Postado Março 22, 2011 Autor Denunciar Share Postado Março 22, 2011 (editado) CPP disse: Olá Fabin,No seu for o uso de x[posicao].nome = ' ' está incorreto, o mesmo vale pra .telefone = ' '.Isso porque um array de bytes pra ser usado assim precisa ser indexado, ou seja, você teria que ter outra variavel pra fazer:for (int a = 0; a < 20; a++) x[posicao].nome[a] = ' '; for (int b = 0; b < 14; b++) x[posicao].telefone[b] = ' '; Mas isso não é muito pratico, então você pode usar o strcpy() pra zerar suas variaveis do tipo array de bytes. strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); Também pode usar o memset() pra preencher um conteudo de memória. Eu coloquei as duas opções no seu código. qualquer dúvida fala ai. Abs #include <stdlib.h> #include <stdio.h> #include <mem.h> #include <string.h> typedef struct { char nome[20]; char telefone[14]; }contato; void limpar_agenda(contato x[10]); void limpar_agenda2(contato *x, int items); int main() { contato agenda[10]; limpar_agenda(agenda); limpar_agenda2(&agenda[0], 10); system("pause"); return 0; } void limpar_agenda(contato x[10]) { for(int posicao=0;posicao<10;posicao++) { strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); } printf("\nAgenda Apagada!\n"); } void limpar_agenda2(contato *x, int items) { memset(x, 0, sizeof(contato) * items); printf("\nAgenda Apagada!\n"); }O primeiro Metodo acho que entendi, me corrija se estiver errado, no casos ele vai copiar vazio para cada posição em nome e telefone da agenda certo, agora o outro metodo você está usando ponteiro sei pouca coisa e tambem o professor vai dar essa materia hoje então não vou usa-la por enquantomas qualquer duvida posto aqui novamentevalewst+ Editado Março 22, 2011 por Fabin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CPP Postado Março 22, 2011 Denunciar Share Postado Março 22, 2011 Só pra você entender o que acontece na memoria eu fiz mais algumas modificações.Copio a string "abcdefghijklmnopqrst" para agenda[0].nome.Ai você pode ver que na primeira posição tem [a = 97] e na ultima tem [ = 0].Aqui [ = 0] representa o final da string.Quando você faz o strcpy(<variavel>, "") ele coloca o "\ 0" na primeira posição indicando que ela termina ali e ignora o resto da memória.Quando uso o memset() passando a quantidade de bytes que eu quero preencher ele limpa toda a memória.A primeira opção atende sua necessidade atual, só estou acrescentando elementos pra você poder manipular a memória do jeito que precisar.Desculpa se as vezes eu complico as coisas.AbsExecuta o programa abaixo pra ver as saidas.#include <stdlib.h> #include <stdio.h> #include <mem.h> #include <string.h> typedef struct { char nome[20]; char telefone[14]; }contato; void limpar_agenda(contato x[10]); void limpar_agenda2(contato *x, int items); int main() { contato agenda[10]; strcpy(agenda[0].nome, "abcdefghijklmnopqrst"); int s; printf("\n\nString = %s\n\n", agenda[0].nome); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); limpar_agenda(agenda); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); limpar_agenda2(&agenda[0], 10); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); system("pause"); return 0; } void limpar_agenda(contato x[10]) { for(int posicao=0;posicao<10;posicao++) { strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); } printf("\nAgenda Apagada!\n"); } void limpar_agenda2(contato *x, int items) { memset(x, 0, sizeof(contato) * items); printf("\nAgenda Apagada!\n"); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fabin Postado Março 22, 2011 Autor Denunciar Share Postado Março 22, 2011 (editado) CPP disse: Só pra você entender o que acontece na memoria eu fiz mais algumas modificações.Copio a string "abcdefghijklmnopqrst" para agenda[0].nome.Ai você pode ver que na primeira posição tem [a = 97] e na ultima tem [ = 0].Aqui [ = 0] representa o final da string.Quando você faz o strcpy(<variavel>, "") ele coloca o "\ 0" na primeira posição indicando que ela termina ali e ignora o resto da memória.Quando uso o memset() passando a quantidade de bytes que eu quero preencher ele limpa toda a memória.A primeira opção atende sua necessidade atual, só estou acrescentando elementos pra você poder manipular a memória do jeito que precisar.Desculpa se as vezes eu complico as coisas.AbsExecuta o programa abaixo pra ver as saidas.#include <stdlib.h> #include <stdio.h> #include <mem.h> #include <string.h> typedef struct { char nome[20]; char telefone[14]; }contato; void limpar_agenda(contato x[10]); void limpar_agenda2(contato *x, int items); int main() { contato agenda[10]; strcpy(agenda[0].nome, "abcdefghijklmnopqrst"); int s; printf("\n\nString = %s\n\n", agenda[0].nome); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); limpar_agenda(agenda); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); limpar_agenda2(&agenda[0], 10); for (s = 0; s <= 20; s++) printf("[%c = %3d] ", agenda[0].nome[s], agenda[0].nome[s]); printf("\n\n"); system("pause"); return 0; } void limpar_agenda(contato x[10]) { for(int posicao=0;posicao<10;posicao++) { strcpy(x[posicao].nome, ""); strcpy(x[posicao].telefone, ""); } printf("\nAgenda Apagada!\n"); } void limpar_agenda2(contato *x, int items) { memset(x, 0, sizeof(contato) * items); printf("\nAgenda Apagada!\n"); } não ta complicando não, afinal vou ver essa materia hoje de ponteiros ai é bom que tento entender mais tarde a 2 opção que me passou, a primeira eu entendi melhor agora com a explicação agora outra duvida estou fazendo uma função para pesquisar, porem quando a posição está vazia ('') ele está passando direto pelo if e executando o else, o que pode ser void pesquisar_agenda(contato x[10]) { int posicao; system("cls"); printf("***Pesquisar Contato***\n\n"); do{ printf("Digite uma posição de 1 a 10:\t"); scanf("%d",&posicao); }while(posicao < 1 || posicao > 10); posicao--; if(x[posicao].nome == '') { printf("Não há contato nesta posição!\n"); system("pause"); } else { printf("Nome: \t%s.\n",x[posicao].nome); printf("Telefone: \t%s.\n",x[posicao].telefone); } } Editado Março 22, 2011 por Fabin Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CPP Postado Março 22, 2011 Denunciar Share Postado Março 22, 2011 Isso tem a ver com o que eu mencionei antes.Um array de bytes precisa ser indexado ou usar funções que o tratem corretamente.Tenta uma das opções no if: if(x[posicao].nome[0] == ' ')ouif (strcmp(x[posicao].nomte, "") == 0)ouif (strlen(x[posicao].nome) == 0)Abs Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fabin Postado Março 22, 2011 Autor Denunciar Share Postado Março 22, 2011 CPP disse: Isso tem a ver com o que eu mencionei antes.Um array de bytes precisa ser indexado ou usar funções que o tratem corretamente.Tenta uma das opções no if: if(x[posicao].nome[0] == ' ')ouif (strcmp(x[posicao].nomte, "") == 0)ouif (strlen(x[posicao].nome) == 0)Absentendo CPP, foi mal pelo vacilovou ir fazendo o restante aqui...te mandei uma mensagem depois da uma lolhada laabraçot+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CPP Postado Março 22, 2011 Denunciar Share Postado Março 22, 2011 Que isso mano.De boa, só espero estar ajudando em alguma coisa.Abs Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Fabin Postado Março 22, 2011 Autor Denunciar Share Postado Março 22, 2011 CPP disse: Que isso mano.De boa, só espero estar ajudando em alguma coisa.Absbrother tu deve dar aula melhor que meu professor rsrs.. to aprendendo muitodesenvolvio programa verifica se ficou legal e que posso melhorar/*1. Melhore o programa de agenda criado nas aulas de revisão através da utilização de estruturas.*/ #include <stdlib.h> #include <stdio.h> #include <string.h> //------------------------------------------------- // Declaração das Estruturas Usadas no Programa //------------------------------------------------- typedef struct { char nome[20]; char telefone[14]; }contato; //------------------------------------------------- // Declarações das Funções usadas no Programa //------------------------------------------------- void limpar_agenda(contato x[10]); void pesquisar_agenda(contato x[10]); void inserir(contato x[10]); void alterar(contato x[10]); void excluir(contato x[10]); int menu(void); //-------------------------------------------------------- int main() //Função Principal do Para execução do Programa { contato agenda[10]; int opcao; limpar_agenda(agenda); do{ opcao = menu(); switch(opcao) { case 1: pesquisar_agenda(agenda); break; case 2: inserir(agenda); break; case 3: alterar(agenda); break; case 4: excluir(agenda); break; case 9: limpar_agenda(agenda); break; case 0: // sai do programa break; default: printf("\nOPCAO INVALIDA! \n"); system("pause"); break; } }while(opcao!= 0); system("pause"); return 0; } //------------------------------------------------------------------------------------------- // Declaração dos Escopos das funções //------------------------------------------------------------------------------------------- int menu(void) //função para mostrar menu na tela e returna opção escolhida { int op; system("cls"); printf("***Menu de Opcoes***\n"); printf("1 - Pesquisar Contatos \n"); printf("2 - Inserir Contatos \n"); printf("3 - Alterar Contatos \n"); printf("4 - Excluir Contatos \n"); printf("9 - Limpar Agenda \n"); printf("0 - Sair \n"); printf("\n\t Digite uma Opcao: \n"); scanf("%d",&op); return op; } //-------------------------------------------------------------------------------------------- void limpar_agenda(contato x[10])//função para limpar agenda { for(int posicao=0;posicao<10;posicao++) { strcpy(x[posicao].nome, "");//copia vazio para nome e telefone para cada posição da agenda strcpy(x[posicao].telefone, ""); } printf("Agenda Apagada!\n"); } //---------------------------------------------------------------------------------------------- void pesquisar_agenda(contato x[10]) //função para pesquisar contato na agenda { int posicao; system("cls"); printf("***Pesquisar Contato***\n\n"); do{ printf("Digite uma posição de 1 a 10:\t"); //do para garantir que usuário irá digitar posição de 1 a 10 scanf("%d",&posicao); }while(posicao < 1 || posicao > 10); posicao--; //diminui uma posição poi vetor começa do 0 e termina no 9 if(strcmp(x[posicao].nome,"") == 0) //compara posição se estiver vazia entra neste if { printf("não há contato nesta posicao!\n"); system("pause"); } else // senão imprime na tela posição com contato solicitado pelo usuário { printf("Nome: \t%s.\n",x[posicao].nome); printf("Telefone: \t%s.\n",x[posicao].telefone); system("pause"); } } //-------------------------------------------------------------------------------------------------- void inserir(contato x[10]) //função para inserir contato na agenda { int posicao = 0; while((strcmp(x[posicao].nome,"") == 0) && posicao < 9) //aqui incrementa na posição enquanto estiver vazia e for menor que 9 { posicao++; } if(posicao < 10 && ((strcmp(x[posicao].nome,"")==0))) //se posição menor que 10 e estiver vazia ira inserir { printf("Digite o Nome:\t\n"); getchar(); gets(x[posicao].nome); printf("Digite o Telefone: \t\n"); getchar(); gets(x[posicao].telefone); } else //senão retorna que agenda está cheia { printf("Agenda Cheia!\n"); system("pause"); } } //--------------------------------------------------------------------------------------------------- void alterar(contato x[10]) //função para alterar contato { int posicao; char confirma; do{ printf("Informe uma posição de 1 a 10 para alterar:\t\n"); scanf("%d",&posicao); }while(posicao < 1 || posicao > 10); //do para garantir que usuário irá digitar posição de 1 a 10 posicao--; if(strcmp(x[posicao].nome,"")== 0) //se posição estiver vazia retorna que não há contato na posição { printf("Sem contato nessa posicao.\n"); system("pause"); } else { printf("Nome:\t%s\n",x[posicao].nome); //senão entra no else para verificar se usuário deseja alterar nome e telefone printf("Deseja alterar o nome? (s)im / (n)ao\n"); getchar(); scanf("%c",&confirma); if(confirma == 's') { printf("Digite o Nome:\t"); getchar(); gets(x[posicao].nome); printf("Nome alterado com Sucesso!.\n"); } printf("Telefone:\t%s\n",x[posicao].telefone); printf("Deseja alterar o telefone? (s)im / (n)ao\n"); getchar(); scanf("%c",&confirma); if(confirma == 's') { printf("Digite o telefone:\t"); getchar(); gets(x[posicao].telefone); printf("Telefone alterado com sucesso!\n"); system("pause"); } } } //------------------------------------------------------------------------------------------------------------------ void excluir(contato x[10])// função para excluir contato { int posicao; char confirma; do{ printf("Informe uma posição de 1 a 10 para excluir:\t\n"); scanf("%d",&posicao); //do para garantir que usuário irá digitar posição de 1 a 10 }while(posicao < 1 || posicao > 10); posicao--; if(strcmp(x[posicao].nome,"")== 0) //se posição estiver vazia retorna que não há contato na posição para excluir { printf("Sem contato nessa posicao.\n"); system("pause"); } else { printf("Nome:\t%s\n",x[posicao].nome); //senão entra no else para verificar se usuário deseja excluir nome e telefone printf("Deseja excluir o nome? (s)im / (n)ao\n"); getchar(); scanf("%c",&confirma); if(confirma == 's') { strcpy(x[posicao].nome, ""); printf("Nome excluido com Sucesso!.\n"); } printf("Telefone:\t%s\n",x[posicao].telefone); printf("Deseja excluir o telefone? (s)im / (n)ao\n"); getchar(); scanf("%c",&confirma); if(confirma == 's') { strcpy(x[posicao].telefone, ""); printf("Telefone excluido com sucesso!\n"); system("pause"); } } } //--------------------------------------------------------------------------------------------------------------------valews brotherabraçot+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Fabin
Bom dia pessoal!
O meu problema é banal porem não sei como resolver, sempre que compilo o programa ocorre o erro:
estou fazendo aos poucos meu codigo, estou fazendo as funçoes e testando. ta ai o codigovlaews pela ajuda
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
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.