davide92 Posted June 5, 2012 at 06:06 PM Report Share #460638 Posted June 5, 2012 at 06:06 PM Boas a todos ando a fazer um trabalho para algoritmia e ando aqui com uns problemas no fgets: PESPECIALIDADE criar_especialidades() { PESPECIALIDADE ptr; ptr = (PESPECIALIDADE)malloc(sizeof(ESPECIALIDADE)); printf("Nome: "); fgets(ptr->nome, 50, stdin); printf("Descrição especialidade: "); fgets(ptr->descricao, 50, stdin); } dá-me este erro "warning: passing argument 1 of 'fgets' makes pointer from integer without a cast" Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 5, 2012 at 06:18 PM Report Share #460649 Posted June 5, 2012 at 06:18 PM vamos por partes : 1º isso não é um erro é um warning : warning: passing 2º passing argument 1 of 'fgets' ora bem ... isso é : ptr->nome como não existe uma única linha de código a dizer a estrutura de PESPECIALIDADE não vais ter nenhuma resposta 3º pointer from integer without a cast como já fizeste uma cast anteriormente no malloc ( se bem que podias tirar isso ) devo presumir que sabes o que é um cast ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
pikax Posted June 5, 2012 at 06:19 PM Report Share #460651 Posted June 5, 2012 at 06:19 PM 2º passing argument 1 of 'fgets' ora bem ... isso é : ptr->nome como não existe uma única linha de código a dizer a estrutura de PESPECIALIDADE não vais ter nenhuma resposta 👍 Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
davide92 Posted June 5, 2012 at 06:35 PM Author Report Share #460661 Posted June 5, 2012 at 06:35 PM vamos por partes : 1º isso não é um erro é um warning : warning: passing 2º passing argument 1 of 'fgets' ora bem ... isso é : ptr->nome como não existe uma única linha de código a dizer a estrutura de PESPECIALIDADE não vais ter nenhuma resposta 3º pointer from integer without a cast como já fizeste uma cast anteriormente no malloc ( se bem que podias tirar isso ) devo presumir que sabes o que é um cast ... Desculpa a minha burrice mas cast não sei o que é... Tenho mais acima no programa assim struct especialidade { char nome; // Nome da especialidade char descricao; // Descrição especialidade }; typedef struct especialidade ESPECIALIDADE; typedef ESPECIALIDADE * PESPECIALIDADE; Link to comment Share on other sites More sharing options...
pikax Posted June 5, 2012 at 06:47 PM Report Share #460665 Posted June 5, 2012 at 06:47 PM Desculpa a minha burrice mas cast não sei o que é... Tenho mais acima no programa assim struct especialidade { char nome; // Nome da especialidade char descricao; // Descrição especialidade }; typedef struct especialidade ESPECIALIDADE; typedef ESPECIALIDADE * PESPECIALIDADE; cast e' "converter" algum tipo de variavel para outro. entao queres guardar uma string num so' char??? tens que corrigir a tua estrutura: struct especialidade { char nome[50]; // Nome da especialidade char descricao[50]; // Descrição especialidade }; Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
davide92 Posted June 5, 2012 at 09:06 PM Author Report Share #460705 Posted June 5, 2012 at 09:06 PM Já corrigi mas quando corro só me deixa escrever a descrição :s Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 5, 2012 at 09:14 PM Report Share #460711 Posted June 5, 2012 at 09:14 PM Já corrigi mas quando corro só me deixa escrever a descrição :s tenho as minhas dúvidas. ou não copiaste bem a alteração que te disseram ou está a acontecer um pequeno senão de buffers de leitura e escrita. 1º : verifica se estás a ler realmente os dados fazendo printf no final da função 2º : coloca a seguinte linha de código após todos os printf's que tenhas que não possuem o caracter '\n' no texto a apresentar: fflush(stdout); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
pikax Posted June 5, 2012 at 09:18 PM Report Share #460717 Posted June 5, 2012 at 09:18 PM tambem nao pode ser do '\n' que permanece no buffer apos o fgets? Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 5, 2012 at 09:21 PM Report Share #460718 Posted June 5, 2012 at 09:21 PM tambem nao pode ser do '\n' que permanece no buffer apos o fgets? nop ... o fgets tira o '\n' indo mesmo para o buffer deixando ao cuidado do programador retirar-lo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
pikax Posted June 5, 2012 at 09:27 PM Report Share #460722 Posted June 5, 2012 at 09:27 PM nop ... o fgets tira o '\n' indo mesmo para o buffer deixando ao cuidado do programador retirar-lo Eu sei que tinha problemas como ele esta a ter, quando fazia um scanf a um char, se eu fizesse 2 scanf's seguidos, o '\n' fica no stdin e nao entrava no segundo Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
davide92 Posted June 5, 2012 at 11:38 PM Author Report Share #460764 Posted June 5, 2012 at 11:38 PM Esta parte já está resolvida, gostaria de saber se há alguma maneira de por exemplo em duas funcoes fgets irá-me imprimir desta forma Ex: Ana Escola Quando o que eu queria era "Ana Escola" Como é que posso fazer ? Link to comment Share on other sites More sharing options...
pikax Posted June 5, 2012 at 11:45 PM Report Share #460768 Posted June 5, 2012 at 11:45 PM (edited) podes fazer assim: scanf("%[^\n]",ptr->nome); como estas a com o stdin no fgets, podes muito bem usar o scanf, tens que ter cuidado com o overflow mas podes sempre utilizar a funcao segura do scanf. ja agora o "[^\n]" ira' ler todos os caracteres ate' primires enter Edited June 5, 2012 at 11:45 PM by pikax Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast." Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted June 6, 2012 at 12:01 AM Report Share #460775 Posted June 6, 2012 at 12:01 AM podes fazer assim: scanf("%[^\n]",ptr->nome); como estas a com o stdin no fgets, podes muito bem usar o scanf, tens que ter cuidado com o overflow mas podes sempre utilizar a funcao segura do scanf. ja agora o "[^\n]" ira' ler todos os caracteres ate' primires enter deves retirar o '\n' do buffer scanf("%[^\n]\n",ptr->nome); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now