Por que a função nao roda?

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

igor
igormarney

(usa Outra)

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


  


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

Paulo
paulo1205

(usa Ubuntu)

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.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts