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.