Pular para o conteúdo

Por que a função nao roda?

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar

1. Por que a função nao roda?

Enviado em 04/10/2013 - 16:41h

peço a ajuda de voces para saber porque a função nao execulta sendo que esta tudo ao meu ver correto, eu execulto no codebloks com o ctrl + f10 por causa do gets mais nao roda a função




#include <stdio.h>
#include <stdlib.h>

typedef struct paciente {
char cod_pac[7];
char nome[40];
char endereco[30];
char fone[9];
}paciente;

struct paciente preenche (struct paciente dados[ ], int n){
int v;
for (v=0; v<n; v++){
printf ("\t\tREGISTRO DE PACIENTE\n\n");
printf (" CODIGO: ");
fflush(stdin);
gets (dados[v].cod_pac);
printf (" NOME: ");
gets (dados[v].nome);
printf ("ENDERE&#3623;O: ");
gets (dados[v].endereco);
printf (" FONE: ");
gets (dados[v].fone);
}
return dados[v];
}

int main ( ) {
int x;

printf ("QUANTIDADE DE PACIENTES: ");
printf("\n");

scanf ("%d",&x);


struct paciente p[x];
preenche(p,x);
return 0;
}

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

2. Re: Por que a função nao roda?

Enviado em 04/10/2013 - 20:56h

Você está usando qual sistema operacional e qual compilador? O que você quer exatamente que o programa faça?

Dicas genéricas que eu posso lhe dar:

  1) Não use gets() em hipótese alguma. Essa função mal-projetada e que nunca deveria ter existido foi finalmente banida da biblioteca padrão da linguagem C na atualização do padrão feita em 2011. Prefira sempre e exclusivamente fgets().

  2) O padrão do C diz que a função fflush() só deve, em princípio, ser usada com streams de saída, e não com os de entrada. Apesar de o Windows tradicionalmente permitir que você o faça, com o comportamento do suprimir alguns caracteres do buffer de entrada, não existe garantia alguma de que isso vá funcionar em outras máquinas ou mesmo com outros compiladores na mesma máquina. Além disso, há formas melhores, totalmente de acordo com o padrão (e que, portanto, funcionarão garantidamente em qualquer máquina), de fazer com que não haja sobras no buffer de entrada, principalmente depois de usar scanf().

  3) A construção “struct paciente p[x];”, que aprece no corpo de main(), em que o valor de x só é conhecido no momento da execução do programa, só passou a ser suportada após a revisão de 1999 do padrão da linguagem C; em C++, a mesma construção sempre foi e continua sendo inválida, mesmo no padrão mais novo, de 2011. Se você compilar com um compilador que não suporte revisões atualizadas do padrão do C (como o Microsoft Visual Studio, que intencionalmente só suporta a versão do padrão do C de 1989/1990) ou com um compilador C++, seu código será inválido.

  4) Na função preenche(), acho estranho o tipo do valor de retorno. Além disso, repare que você estará retornando o valor de um elemento que extrapola o tamanho do array p. Lembre-se de que quando você declara algo como “struct paciente p[x];”, os índices para acesso aos elementos do array devem ter valores que vão de 0 até x-1, e então verifique que não é isso o que acontece com o valor de v ao final do loop.

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder