paulopatto 0 Denunciar post Postado Abril 17, 2009 Olá quitZAUMMM, então esse null é mais vamos dizer... Há deu erro eu tenho que retornar algo, e como no caso podemso ter numero negativos e zeros, fica complicado eu retornar um 0.0 que é um retorno possivel, eu já havia visto algo do tipo em erros, tipo seria o caso de lançamento de uma exception eu sei. Não irei falar aqui "No java isso é possivel..." pois sofro risco a minha integridade fisica e pisicologica (hahaha). Ai fica a dúvida uma area de memória alocada em float, não pode ser nula? Não sei se você concorda mas (!estaVazio(p)) ? return p->ultimo : return NULL; é um teste e eu tenho de evitar esse erro, e que somente passar um valor qualquer não soluciona o problema. Compartilhar este post Link para o post Compartilhar em outros sites
paulopatto 0 Denunciar post Postado Abril 17, 2009 Er desculpe mas uma correção em duas funções: float retornaTopo(TFila *p){ // Isso só é possível pois assumimos que a TFila segue essa assinatura // Versão com operador ternário /** *<code>*/ (!estaVazio(p)) ? return p->mes[p->primeiro] : return NULL; /**</code> */ /// Verssão com IF /** *<code> *if(!eVazio){ * return p->primeiro; *} *return NULL; *</code> */ } float retornaUltimo(TFila *p){ // Veja retorna topo (!estaVazio(p)) ? return p->mes[p->ultimo] : return NULL; /** * Vesão com IF *<code> *if(!eVazio){return p->ultimo;} *return NULL; *</code> */ } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 17, 2009 em relação aos erros, fiz meio rapido aki e consegui tirar, + rodar funfar jah é outros 500.. no tFila tive q fazer isso senaum num tava rodando; #define MES 12 typedef struct{ int primeiro; int ultimo; float mes[MES]; static const int limite = 12; }TFila_;acho q no App.cpp soh mudei isso: //#include "tFila.cpp" //Estrututa de dados da fila // Variavel GLOBAL TFila_ *fila_;ai fui mudando o nome das variaveis. e num fila.cpp soh fui mudando o nome das variaveis tbm.. da uma olhada ae.. []s Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Abril 17, 2009 você não pode retornar NULL em uma função que na declaração retorna um float... mande a função retornar um ponteiro para float, ai sim! float* retornaUltimo(TFila *p){ // Veja retorna topo (!estaVazio(p)) ? return &p->mes[p->ultimo] : return NULL; } Agora você pode retornar null. só não esqueça que você está retornando um ponteiro para float! Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Abril 17, 2009 Erro "sintax errorbefore "agenda" " Nas linhas 38, 40, 41, 42, 43 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct dados_endereco_ { char rua[30]; int num; char bairro[20]; }dados_endereco; typedef struct agenda_ { char nome[30]; float tel; char email[20]; dados_endereco endereco; }agenda; agenda cadastrar(void){ agenda aa; printf("Informe o nome \n"); scanf("%s",&aa.nome); printf("Informe o telefone \n"); scanf("%f",&aa.tel); printf("Informe o email \n"); scanf("%s",&aa.email); printf("Informe a rua \n"); scanf("%s",&aa.endereco.rua); printf("Informe o numero \n"); scanf("%d",&aa.endereco.num); printf("Informe o bairro \n"); scanf("%s",&aa.endereco.bairro); return aa; } agenda pesquisar(void){ char nome[30]; printf("Informe o nome \n"); fgets(nome, 30, stdin); if( strcmp (nome, agenda.nome) ){ printf("%s \n",agenda.nome); printf("%f \n",agenda.tel); printf("%s \n",agenda.email); printf("%s \n",agenda.endereco.rua); printf("%d \n",agenda.endereco.num); } else { printf("Nome invalido \n"); } } int main() { int n; do{ printf("Informe opcao que deseja \n"); printf("(1) Cadastrar \n"); printf("(2) Pesquisar \n"); scanf("%d",&n); if(n==1){ agenda agenda_cadastra; agenda_cadastra = cadastrar(); } else { if(n==2){ agenda agenda_pesquisa; agenda_pesquisa = pesquisar(); } else { printf("Opcao invalida \n"); } } }while(n!= 1 && n!= 2); printf("Pesquisa \n"); agenda agenda_pesquisa; agenda_pesquisa = pesquisar(); system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 17, 2009 agenda é um tipo de variavel naum uma variavel.. naum adianta fazer agenda.nome Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Abril 17, 2009 Como poderia fazer ? Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 17, 2009 olha leia o tópico do Victor para naum ter sujeira no buffer. eu usei um getchar(); pq num qro mudar muito do seu código + naum faça essa má pratica c tiver tempo.. veja como fico: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct dados_endereco_ { char rua[30]; int num; char bairro[20]; }dados_endereco; typedef struct agenda_ { char nome[30]; float tel; char email[20]; dados_endereco endereco; }agenda; agenda cadastrar(void){ agenda aa; printf("Informe o nome \n"); scanf("%s",&aa.nome); printf("Informe o telefone \n"); scanf("%f",&aa.tel); printf("Informe o email \n"); scanf("%s",&aa.email); printf("Informe a rua \n"); scanf("%s",&aa.endereco.rua); printf("Informe o numero \n"); scanf("%d",&aa.endereco.num); printf("Informe o bairro \n"); scanf("%s",&aa.endereco.bairro); return aa; } agenda pesquisar(agenda agenda1){ char nome[30]; getchar(); printf("Informe o nome \n"); fgets(nome, 30, stdin); nome[strlen(nome)-1] = '\0'; if(!strcmp(nome, agenda1.nome) != 0){ printf("%s \n",agenda1.nome); printf("%f \n",agenda1.tel); printf("%s \n",agenda1.email); printf("%s \n",agenda1.endereco.rua); printf("%d \n",agenda1.endereco.num); } else { printf("Nome invalido \n"); } } int main() { agenda agenda_cadastra; int n; do{ printf("Informe opcao que deseja \n"); printf("(1) Cadastrar \n"); printf("(2) Pesquisar \n"); scanf("%d",&n); if(n==1){ agenda_cadastra = cadastrar(); } else { if(n==2){ agenda agenda_pesquisa; agenda_pesquisa = pesquisar(agenda_cadastra); } else { printf("Opcao invalida \n"); } } }while(n== 1 || n== 2); system("PAUSE"); return 0; } []s --EDIT--- pronto pra naum usar o getchar(); soh alterar pra essa parte: char nome[30]; printf("Informe o nome \n"); scanf("%s%*c", nome); Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Abril 17, 2009 Obrigado pela ajuda pessoal. É muito complicado aprender arquivos para utilizar melhor esse código salvando e editando arquivo txt ? #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct dados_endereco_ { char rua[30]; int num; char bairro[20]; }dados_endereco; typedef struct agenda_ { char nome[30]; float tel; char email[20]; dados_endereco endereco; }agenda; agenda cadastrar(void){ agenda aa; printf("Informe o nome \n"); scanf("%s",&aa.nome); printf("Informe o telefone \n"); scanf("%f",&aa.tel); printf("Informe o email \n"); scanf("%s",&aa.email); printf("Informe a rua \n"); scanf("%s",&aa.endereco.rua); printf("Informe o numero \n"); scanf("%d",&aa.endereco.num); printf("Informe o bairro \n"); scanf("%s",&aa.endereco.bairro); return aa; } agenda pesquisar(agenda agenda1){ char nome[30]; getchar(); printf("Informe o nome \n"); fgets(nome, 30, stdin); nome[strlen(nome)-1] = '\0'; if(!strcmp(nome, agenda1.nome) != 0){ printf("%s \n",agenda1.nome); printf("%f \n",agenda1.tel); printf("%s \n",agenda1.email); printf("%s \n",agenda1.endereco.rua); printf("%d \n",agenda1.endereco.num); } else { printf("Nome invalido \n"); } } int main() { agenda agenda_cadastra; int n; do{ printf("Informe opcao que deseja \n"); printf("(1) Cadastrar \n"); printf("(2) Pesquisar \n"); printf("(3) Sair \n"); scanf("%d",&n); if(n==1){ agenda_cadastra = cadastrar(); } else { if(n==2){ agenda agenda_pesquisa; agenda_pesquisa = pesquisar(agenda_cadastra); } else { if(n==3){ exit(0); } printf("Opcao invalida \n"); } } }while(n != 1 && n != 2 && n != 3); system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
paulopatto 0 Denunciar post Postado Abril 17, 2009 É realmente eu pesso desculpas mas ainda estou com erros. Basicamente ele não reconhece tipo TFila, seguindo o que o QuitZAUMMM recomendou... Mudei um pouco como tfila.cpp Agora stá assim: typedef struct Fila{ static const int limite = 12; int primeiro; int ultimo; float mes[limite]; }TFila; fila.cpp Segundo as recomendações do Victor mudei as assinaturas dos métodos (funções) que manipulam retornos. É até meio obvio pois isso deixa mais proximo ao OOP (creio eu, neste mundo estrturado). float* retornaTopo(TFila *p){ // Isso só é possível pois assumimos que a TFila segue essa assinatura // Versão com operador ternário /** *<code>*/ (!estaVazio(p)) ? return p->mes[p->primeiro] : return NULL; /**</code> */ /// Verssão com IF /** *<code> *if(!eVazio){ * return p->primeiro; *} *return NULL; *</code> */ } app13.cpp Bem como eu mudei as assinaturas apenas queria garantir que ele ia continuar ok use então o tipe casting (mas creio que isso talvez gere erros) cout <<(float)retornaTopo(fila) <<endl; Bem mesmo com as modificações acima o problema parece continuar sendo o arquivo fila.cpp reconhecer a estrutura contida em tfila.cpp, bem ai seria o obvio de tenta dar um include de tfila.cpp em fila.cpp. Mas ai entra o porem estou fazendo todo esse trabalho para poder reaproveitar o arquivo fila.cpp em outros projetos e esse include faria ele perder todo o sentiodo desta criação de módulos, e ao meu ver ser o app.cpp deve fazer essa ligação. Bem com as variaveis acima, seria interessante então o existir um tipo "Genérico" para a estrutura reconhecer o tipo TFila sem o include, algo como o Object no Java. Tentei mudar a assinatura dos métodos para algo como: float* retornaTopo(struct TFila *p)Mas ele continua bravo. Bem vou postar a saida de erros do Cygwin, que é bem similar a do DEV C++ creio eu, mas a vantagem é que o pessoal do linux consegue vizualizar o memso que o pessoal do windows. SAIDA DO COMPILADOR CYGWIN: In file included from app13.cpp:2: fila.cpp:8: error: `TFila' was not declared in this scope fila.cpp:8: error: `p' was not declared in this scope fila.cpp:8: error: expected `,' or `;' before '{' token fila.cpp:9: error: `TFila' was not declared in this scope fila.cpp:9: error: `p' was not declared in this scope fila.cpp:9: error: expected `,' or `;' before '{' token fila.cpp:15: error: `TFila' was not declared in this scope fila.cpp:15: error: `p' was not declared in this scope fila.cpp:15: error: expected `,' or `;' before '{' token fila.cpp:33: error: `TFila' was not declared in this scope fila.cpp:33: error: `p' was not declared in this scope fila.cpp:33: error: expected `,' or `;' before '{' token fila.cpp:45: error: `TFila' has not been declared fila.cpp:45: error: ISO C++ forbids declaration of `p' with no type fila.cpp: In function `void inserir(float, int*)': fila.cpp:46: error: `estaCheio' cannot be used as a function fila.cpp:47: error: request for member `mes' in `*p', which is of non-class type `int' fila.cpp:47: error: request for member `ultimo' in `*p', which is of non-class type `int' fila.cpp:50: error: request for member `ultimo' in `*p', which is of non-class type `int' fila.cpp: At global scope: fila.cpp:54: error: `TFila' was not declared in this scope fila.cpp:54: error: `p' was not declared in this scope fila.cpp:54: error: expected `,' or `;' before '{' token fila.cpp:65: error: variable or field `listar' declared void fila.cpp:65: error: `TFila' was not declared in this scope fila.cpp:65: error: `p' was not declared in this scope fila.cpp:65: error: expected `,' or `;' before '{' token In file included from app13.cpp:2: fila.cpp:68:2: warning: no newline at end of file In file included from app13.cpp:3: tfila.cpp:6:8: warning: no newline at end of file app13.cpp: In function `float* media(TFila*)': app13.cpp:10: error: `estaVazio' cannot be used as a function app13.cpp:15: error: cannot convert `float' to `float*' in return app13.cpp: In function `bool menu()': app13.cpp:41: error: `retornaTopo' cannot be used as a function app13.cpp:44: error: `retornaUltimo' cannot be used as a function app13.cpp:48: error: cannot convert `TFila*' to `int*' for argument `2' to `void inserir(float, int*)' app13.cpp:52: error: `excluir' cannot be used as a function app13.cpp:63: error: `listar' cannot be used as a function app13.cpp:66: error: pointer value used where a floating point value was expected app13.cpp:67: error: pointer value used where a floating point value was expected app13.cpp:79:2: warning: no newline at end of file Quanto aos erros, pesso humildemente que me descupem não sou nenhum expert, por isso paciência. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 17, 2009 paulopatto gostaria de pedir pra abrir um tópico para a sua duvida, pois a do viciado (autor do tópico) foi resolvido.. ai lah você posta os fontes denovo do jeito q esta ok? []s Compartilhar este post Link para o post Compartilhar em outros sites
paulopatto 0 Denunciar post Postado Abril 17, 2009 Sim perfeito Compartilhar este post Link para o post Compartilhar em outros sites