Jump to content

fgets erro


davide92

Recommended Posts

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

vamos por partes :

isso não é um erro é um warning :

warning: passing

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

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
Link to comment
Share on other sites

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

vamos por partes :

isso não é um erro é um warning :

warning: passing

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

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

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

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
Link to comment
Share on other sites

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

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

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 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

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
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.