this error: "parse error at end of input"
Printable View
this error: "parse error at end of input"
At my C code this error apears "parse error at endo of input " can anyone help me?
"endo" is when you go over the handlebars on a bicycle, but "parse error at end of input" usually means that your code is not complete - something like a missing brace or generally confusing the compiler in some way.
If you post the code, maybe we can help you.
--
Mats
ok thanks wait a moment
Code:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 0
#define FALSE 1
#define LEN_FICHEIRO 256
#define FICHEIRO_DEFAULT "dadosBin.dat"
/* ESTRUTURAS */
/* estrutura que define o no */
typedef struct no {
struct no *prox;
struct no *ant;
void *dados;
}NO;
typedef NO *PNO;
/* estrutura que define a especialidade */
typedef struct especialidades {
char nomeEspecialidade [20+1];
char descricaoEspecialidade [40+1];
} ESPECIALIDADES;
typedef ESPECIALIDADES *PESPECIALIDADES;
/* estrutura que define os medicos niom= numero identificacao ordem medico*/
typedef struct medicos {
int niom; //num identificacao ordem medicos
char nomeMedico [40+1];
char espMedico [20+1];
} MEDICOS;
typedef MEDICOS *PMEDICOS;
/* estrutura que define os utentes */
typedef struct utentes {
char nomeUtente [40+1];
char tipoAssistencia [20+1];
char nrcartao [20+1];
char valCartaoUtente[10];
char dataNascUtente[10];
char telefone[10];
char localidade [40+1];
} UTENTES;
typedef UTENTES *PUTENTES;
/* estrutura que define os tipos de assistencia */
typedef struct assistenciamedica {
char nomeAssUtente [20+1];
char descAssUtente [40+1];
} ASSISTENCIAMEDICA;
typedef ASSISTENCIAMEDICA *PASSISTENCIAMEDICA;
/* VARIAVEIS GLOBAIS */
PNO cabecaMedico = NULL;
PNO cabecaEspecialidade = NULL;
PNO cabecaUtente = NULL;
PNO cabecaAssistenciamedica = NULL;
PNO cabecaAgendaConsultas = NULL;
int listaFicheiroAlterado=FALSE;
/* FUNCOES */
void fim();
void MenuEspecialidades();
void MenuMedicos();
void MenuAssistenciaMedica();
void MenuUtentes();
void MenuConsultas();
void MenuPesquisas();
void MenuOrdenar();
void verificaFicheiro();
void leFicheiro();
void gravaFicheiro(PNO *cabecaEspMedicaTemp, PNO *cabecaMedicoTemp, PNO *cabecaAssUtenteTemp, PNO *cabecaUtenteTemp, PNO *cabecaAgendaConsultasTemp);
PNO criarNO (void *p);
void insereAcabeca (PNO *cabeca, PNO elemento);
void bubbleSort (PNO cabeca, int (*compara)(), char ordem);
void ordenaNome (PMEDICOS p1, PMEDICOS p2, char ordem);
void ordenaNomeMedico (PMEDICOS p1, PMEDICOS p2, char ordem);
void ordenaMedicoEsp (PMEDICOS p1, PMEDICOS p2, char ordem);
void ordenaUtenteNome (PUTENTES p1, PUTENTES p2, char ordem);
void ordenaUtenteData (PUTENTES p1, PUTENTES p2, char ordem);
/* ESPECIALIDADES */
void insereEspecialidade();
int pesquisarEspecialidade(PNO *cabeca, char pesquisaNomeEspecialidade [20+1]);
void apagarEspecialidade(PNO *cabeca);
void alterarEspecialidade(PNO *cabeca);
void listarEspecialidades(PNO *cabeca);
/* Utentes */
void insereUtente();
int pesquisarUtente(PNO *cabecaUtente, char pesquisaNomeUtente [20+1]);
void apagarUtente(PNO *cabecaUtente);
void alterarUtente(PNO *cabecaUtente);
void listarUtentes(PNO *cabecaUtente);
/* MEDICOS */
void insereMedico();
void listarMedicos(PNO *cabeca);
/* ASSISTENCIA */
void insereAssistencia();
int pesquisar_Assistencia(PNO *cabeca, char nomeAssUtentePesq [20+1]);
void apagarAssistencia(PNO *cabeca);
void alterarAssistencia(PNO *cabeca);
void listarAssistencia(PNO *cabeca);
/* FUNCAO PARA AO FINALIZAR, PERGUNTAR, EM CASO DE HAVER INFORMACAO NA MEMORIA, SE QUEREMOS GRAVAR ESSA INFORMACAO*/
void fim(){
system("cls");
char grava_Ficheiro[3];
if (listaFicheiroAlterado==TRUE) {
printf("\nExistem dados da Memoria que nao foram guardados, deseja garda-los (s/n)?:");
fflush(stdin);
fgets(grava_Ficheiro, 3, stdin);
if(grava_Ficheiro[0] == '\r' || grava_Ficheiro[0] == '\n' || grava_Ficheiro[0] != 's'){
printf("\nOs registos nao foram gravados" );
}
else {
gravaFicheiro(&cabecaEspecialidade, &cabecaMedico, &cabecaAssistenciamedica, &cabecaUtente, &cabecaAgendaConsultas);
}
}
system("cls");
printf("\tObrigado por utilizar o PGM - Programa de Gestao Medica\n");
getch();
system("cls");
}
/* CRIAR NO */
PNO criarNO (void *p){
PNO pno;
pno = (PNO) malloc (sizeof(NO));
pno->ant=pno->prox=NULL;
pno->dados=p;
return pno;
}
/* INSERIR NA LISTA */
void insereAcabeca (PNO *cabeca, PNO elemento){
if (*cabeca) (*cabeca)->ant=elemento; //if cabeca existe , anterior passa a apontar para elemento
elemento->prox=*cabeca;
*cabeca=elemento; // elemento passa a ser o primeiro elemento e é a cabeca
}
/* ORDENAR AS LISTAS */
void bubbleSort (PNO cabeca, int (*compara)(), char ordem){
void *tmp;
PNO ptr1, ptr2;
for (ptr1=cabeca; ptr1; ptr1=ptr1->prox) { /* apenas procede à contagem*/
for (ptr2=cabeca; ptr2->prox; ptr2=ptr2->prox) {
if ((*compara)(ptr2->dados, ptr2->prox->dados, ordem)){
tmp=ptr2->dados;
ptr2->dados=ptr2->prox->dados;
ptr2->prox->dados=tmp;
}
}
}
}
/* FUNCOES PARA SEREM UTILIZADAS A QUANDO PEDIDO DE ORDENACAO POR DETERMINADO REGISTO //////// */
/*ordenar+, ordenar plus+ */
void ordenaNome (PMEDICOS p1, PMEDICOS p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='decr') { // ordena por ordem decrescente
return p1->niom < p2->niom;
} else {
return p1->niom > p2->niom;
}
}
void ordenaNomeMedico (PMEDICOS p1, PMEDICOS p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='d') { // ordena por ordem decrescente
return strcmp(p1->nomeMedico, p2->nomeMedico)==-1;
} else {
return strcmp(p1->nomeMedico, p2->nomeMedico)==1;
}
}
void ordenaMedicoEsp (PMEDICOS p1, PMEDICOS p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='d') { // ordena por ordem decrescente
return strcmp(p1->espMedico, p2->espMedico)==-1;
} else {
return strcmp(p1->espMedico, p2->espMedico)==1;
}
}
void ordenaUtenteNome (PUTENTES p1, PUTENTES p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='d') { // ordena por ordem decrescente
return strcmp(p1->nomeUtente, p2->nomeUtente)==-1;
} else {
return strcmp(p1->nomeUtente, p2->nomeUtente)==1;
}
}
void ordenaUtenteData (PUTENTES p1, PUTENTES p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='d') { // ordena por ordem decrescente
return strcmp(p1->dataNascUtente, p2->dataNascUtente)==-1;
} else {
return strcmp(p1->dataNascUtente, p2->dataNascUtente)==1;
}
}
/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
/* FUNCAO PARA INSERIR ESPECIALIDADES EM MEMORIA */
void insereEspecialidade(){
system("cls");
PNO ptrTempEspecialidade;
PESPECIALIDADES pEspecialidades;
char nomeEspecialidadeTemp [20+1];
printf("\nNome da Especialidade: ");
fflush(stdin);
fgets(nomeEspecialidadeTemp, 20+1, stdin);
if(nomeEspecialidadeTemp[0] == '\r' || nomeEspecialidadeTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
pEspecialidades = (PESPECIALIDADES) malloc (sizeof(ESPECIALIDADES));
strcpy(pEspecialidades->nomeEspecialidade,nomeEspecialidadeTemp);
printf("\n\nIndique a Descricao:");
fflush(stdin);
fgets(pEspecialidades->descricaoEspecialidade, 40+1, stdin );
if(pEspecialidades->descricaoEspecialidade[0] == '\r' || pEspecialidades->descricaoEspecialidade[0] == '\n'){
printf("\nAtencao, deixou o campo vazio" );
}
ptrTempEspecialidade = criarNO(pEspecialidades);
insereAcabeca(&cabecaEspecialidade,ptrTempEspecialidade);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA PESQUISAR ESPECIALIDADES POR NOME */
int pesquisarEspecialidade(PNO *cabeca, char pesquisaNomeEspecialidade [20+1]){
PNO ptr;
PESPECIALIDADES ptrTempEspecialidade;
int encontrado = FALSE;
if(!*cabeca) {
printf("\nNao Existem Especialidades na Memoria. Qualquer tecla para continuar");
getch();
return encontrado;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempEspecialidade=ptr->dados;
if (strcmp(ptrTempEspecialidade->nomeEspecialidade, pesquisaNomeEspecialidade)==0)
printf("\nFoi encontrado e tem a Descricao:%s \n", ptrTempEspecialidade->descricaoEspecialidade);
encontrado=TRUE;
}
printf("\nPressione uma tecla para continuar");
getch();
return encontrado;
}
/* FUNCAO PARA ALTERAR ESPECIALIDADE NUM REGISTO ExISTENTE */
void alterarEspecialidade(PNO *cabeca){
system("cls");
char nomeEspecialidadeTemp [20+1];
PNO ptr;
PESPECIALIDADES ptrTempEspecialidade;
if(!*cabeca) {
printf("\nNao Existem Especialidades na Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Nome da Especialidade: ");
fflush(stdin);
fgets(nomeEspecialidadeTemp, 20+1, stdin);
if(nomeEspecialidadeTemp[0] == '\r' || nomeEspecialidadeTemp[0] == '\n'){ /* Se não colocou nada */
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\n\tPressione uma tecla para continuar...");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempEspecialidade=ptr->dados;
if (strcmp(ptrTempEspecialidade->nomeEspecialidade, nomeEspecialidadeTemp)==0) {
/* printf("\nFoi encontrado com a Descricao:%s \n", ptrTempEspecialidade->descricaoEspecialidade); */
printf("\nNovo nome: ");
fflush(stdin);
fgets(nomeEspecialidadeTemp, 20+1, stdin);
if(nomeEspecialidadeTemp[0] == '\r' || nomeEspecialidadeTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao" );
}
else {
strcpy(ptrTempEspecialidade->nomeEspecialidade,nomeEspecialidadeTemp);
printf("\nIndique a Descricao:");
fflush(stdin);
fgets(ptrTempEspecialidade->descricaoEspecialidade, 40+1, stdin );
if(ptrTempEspecialidade->descricaoEspecialidade[0] == '\r' || ptrTempEspecialidade->descricaoEspecialidade[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
listaFicheiroAlterado=TRUE;
}
}
printf("\nPressione uma tecla para continuar...");
getch();
}
}
/* FUNCAO PARA APAGAR ESPECIALIDADE PELO REGISTO DO NOME */
void apagarEspecialidade(PNO *cabeca){
system("cls");
char apagar_Especialidade[3];
char nomeEspecialidadeTemp [20+1];
PNO ptr;
PESPECIALIDADES ptrTempEspecialidade;
if(!*cabeca) {
printf("\nNao Existem Especialidades na Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Nome da Especialidade Medica:");
fflush(stdin);
fgets(nomeEspecialidadeTemp, 20+1, stdin);
if(nomeEspecialidadeTemp[0] == '\r' || nomeEspecialidadeTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempEspecialidade=ptr->dados;
if (strcmp(ptrTempEspecialidade->nomeEspecialidade, nomeEspecialidadeTemp)==0) {
printf("\nFoi encontrado com a Descricao: %s \n", ptrTempEspecialidade->descricaoEspecialidade);
printf("\nTem a certeza que deseja apagar (s/n)? :");
fflush(stdin);
fgets(apagar_Especialidade, 3, stdin);
if(apagar_Especialidade[0] == '\r' || apagar_Especialidade[0] == '\n' || apagar_Especialidade[0] != 's'){
printf("\nA informacao existente nao sera alterada" );
}
else {
if(ptr->ant) ptr->ant->prox = ptr->prox;
else *cabeca = ptr->prox;
if(ptr->prox) ptr->prox->ant = ptr->ant;
ptr->ant = ptr->prox = NULL;
listaFicheiroAlterado=TRUE;
printf("\nA Especialidade foi apagada com Sucesso\n");
}
}
}
printf("\nPressione uma tecla para continuar");
getch();
}
}
/* FUNCAO PARA LISTAR ESPECIALIDADES , MOSTRA O NOME E DESCRICAO */
void listarEspecialidades(PNO *cabeca){
system("cls");
PNO ptr;
PESPECIALIDADES ptrTempEspecialidade;
if(!*cabeca) {
printf("\nNao Existem Especialidades na Memoria. Qualquer tecla para continuar");
getch();
return;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempEspecialidade=ptr->dados;
printf("\nEspecialidade: %s", ptrTempEspecialidade->nomeEspecialidade);
printf("Descricao: %s \n", ptrTempEspecialidade->descricaoEspecialidade);
}
printf("\nPressione uma tecla para continuar");
getch();
}
/* FUNCAO PARA INSERIR MEDICOS EM MEMORIA */
void insereMedico(){
system("cls");
PNO ptrMedico_Temp;
PMEDICOS pMedicos;
int niomTemp=0;
char nomeMedicoTemp [20+1];
char EspMedTempMed [20+1];
printf("\nIndique qual o Nr da ordem dos Medicos:");
fflush(stdin);
scanf( " %d", &niomTemp);
printf("\nNome do Medico:");
fflush(stdin);
fgets(nomeMedicoTemp, 20+1, stdin);
if(nomeMedicoTemp[0] == '\r' || nomeMedicoTemp[0] == '\n' || niomTemp==0){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
printf("\nQual a especialidade do Medico: ");
fflush(stdin);
fgets(EspMedTempMed, 20+1, stdin);
if (pesquisarEspecialidade(&cabecaEspecialidade, EspMedTempMed)==FALSE) {
printf("\nA especialidade nao existe. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
return;
}
pMedicos = (PMEDICOS) malloc (sizeof(MEDICOS));
pMedicos->niom=niomTemp;
strcpy(pMedicos->nomeMedico,nomeMedicoTemp);
strcpy(pMedicos->espMedico,EspMedTempMed);
ptrMedico_Temp = criarNO(pMedicos);
insereAcabeca(&cabecaMedico,ptrMedico_Temp);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA LISTAR MEDICOS ExISTENTES PELO NUMERO DA ORDEM DOS MEDICOS, NOME E ESPECIALIDADE */
void listarMedicos(PNO *cabeca){
system("cls");
PNO ptr;
PMEDICOS ptrTempMedicos;
if(!*cabeca) {
printf("\nNao Existem Medicos na Memoria. Qualquer tecla para continuar");
getch();
return;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempMedicos=ptr->dados;
printf("\nNumero da Ordem: %d", ptrTempMedicos->niom);
printf("\nNome: %s", ptrTempMedicos->nomeMedico);
printf("\nEspecialidade: %s \n", ptrTempMedicos->espMedico);
}
printf("\nPressione uma tecla para continuar...");
getch();
}
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* FUNCAO PARA PESQUISAR MEDICOS INACABADA */
/*
int pesquisarmedico(PNO *cabeca, int pesquisaNomeMedico [20+1]){
PNO ptr;
MEDICOS ptrTempMedicos;
int encontrado = FALSE;
if(!*cabeca) {
printf("\nNao Existem Medicos na Memoria. Qualquer tecla para continuar");
getch();
return encontrado;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempMedicos=ptr->dados;
if (strcmp(ptrTempMedicos->nomeMedico, pesquisaNomeMedico)==0)
printf("\nFoi encontrado e tem a Especialidade:%s \n", ptrTempMedicos->espMedicoTemp);
encontrado=TRUE;
}
printf("\nPressione uma tecla para continuar");
getch();
return encontrado;
}
*/
/*///////////////////////////////////////////////////////////////////////////////////////// */
/* FUNCAO PARA INSERIR ASSISTENCIAS MEDICAS POR NUMERO E DESCRICAO */
void insereAssistencia(){
system("cls");
PNO ptrAssistencia_Temp;
PASSISTENCIAMEDICA pAssistencia;
char nomeAssistenciaTemp [20+1];
printf("\nNr. do Cartao: ");
fflush(stdin);
fgets(nomeAssistenciaTemp, 20+1, stdin);
if(nomeAssistenciaTemp[0] == '\r' || nomeAssistenciaTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
pAssistencia = (PASSISTENCIAMEDICA) malloc (sizeof(ASSISTENCIAMEDICA));
strcpy(pAssistencia->nomeAssUtente,nomeAssistenciaTemp);
printf("\nDescricao: ");
fflush(stdin);
fgets(pAssistencia->descAssUtente, 40+1, stdin );
if(pAssistencia->descAssUtente[0] == '\r' || pAssistencia->descAssUtente[0] == '\n'){
printf("\n\nAtencao, deixou o campo vazio..." );
}
ptrAssistencia_Temp = criarNO(pAssistencia);
insereAcabeca(&cabecaAssistenciamedica,ptrAssistencia_Temp);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA PESQUISAR CARTOES DE ASSISTENCIA PELO NUMERO
(TAMBEM SERA PARA ALTERAR A FIM DE PESQUISAR POR DESCRICAO) */
int pesquisar_Assistencia(PNO *cabeca, char nomeAssUtentePesq [20+1]){
PNO ptr;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
int encontrado = FALSE;
if(!*cabeca) {
printf("\nNao Existe Registo de Assistencias em Memoria. Qualquer tecla para continuar");
getch();
return encontrado;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrAssistencia_Temp=ptr->dados;
if (strcmp(ptrAssistencia_Temp->nomeAssUtente, nomeAssUtentePesq)==0)
printf("\nFoi encontrado o numero: %s \n", ptrAssistencia_Temp->descAssUtente);
encontrado=TRUE;
}
printf("\nPressione uma tecla para continuar");
getch();
return encontrado;
}
/* FUNCAO PARA APAGAR REGISTO DE CARTOES DE ASSISTENCIA MEDICA PELO NUMERO */
void apagarAssistencia(PNO *cabeca) {
system("cls");
char apagar_Assistencia[3];
char nomeAssistenciaTemp [20+1];
PNO ptr;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
if(!*cabeca) {
printf("\nNao Existe Registo de Assistencias em Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Numero do cartao: ");
fflush(stdin);
fgets(nomeAssistenciaTemp, 20+1, stdin);
if(nomeAssistenciaTemp[0] == '\r' || nomeAssistenciaTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrAssistencia_Temp=ptr->dados;
if (strcmp(ptrAssistencia_Temp->nomeAssUtente, nomeAssistenciaTemp)==0) {
printf("\nFoi encontrado o numero: %s \n", ptrAssistencia_Temp->descAssUtente);
printf("\tTem a certeza que deseja apagar (s/n)? :");
fflush(stdin);
fgets(apagar_Assistencia, 3, stdin);
if(apagar_Assistencia[0] == '\r' || apagar_Assistencia[0] == '\n' || apagar_Assistencia[0] != 's'){
printf("\nA informacao existente nao sera alterada" );
}
else {
if(ptr->ant) ptr->ant->prox = ptr->prox;
else *cabeca = ptr->prox;
if(ptr->prox) ptr->prox->ant = ptr->ant;
ptr->ant = ptr->prox = NULL;
listaFicheiroAlterado=TRUE;
printf("\nO cartao foi apagado apagado com Sucesso\n");
}
}
}
printf("\nPressione uma tecla para continuar");
getch();
}
}
/* FUNCAO PARA ALTERAR DADOS NOS REGISTOS DOS CARTOES DE ASSISTENCIA */
void alterarAssistencia(PNO *cabeca){
system("cls");
char nomeAssistenciaTemp [20+1];
PNO ptr;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
/* printf("\t\t==========Alterar Tipos de Assistencia============="); */
if(!*cabeca) {
printf("\nNao Existe Registo de Assistencias em Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o numero do cartao: ");
fflush(stdin);
fgets(nomeAssistenciaTemp, 20+1, stdin);
if(nomeAssistenciaTemp[0] == '\r' || nomeAssistenciaTemp[0] == '\n'){ /*Se não colocou nada */
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu..." );
printf("\n\tPressione uma tecla para continuar");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrAssistencia_Temp=ptr->dados;
if (strcmp(ptrAssistencia_Temp->nomeAssUtente, nomeAssistenciaTemp)==0) {
printf("\nFoi encontrado o numero: %s \n", ptrAssistencia_Temp->descAssUtente);
printf("\nNovo niom:");
fflush(stdin);
fgets(nomeAssistenciaTemp, 20+1, stdin);
if(nomeAssistenciaTemp[0] == '\r' || nomeAssistenciaTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao" );
}
else {
strcpy(ptrAssistencia_Temp->nomeAssUtente,nomeAssistenciaTemp);
printf("\nDescricao:");
fflush(stdin);
fgets(ptrAssistencia_Temp->descAssUtente, 40+1, stdin );
if(ptrAssistencia_Temp->descAssUtente[0] == '\r' || ptrAssistencia_Temp->descAssUtente[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
listaFicheiroAlterado=TRUE;
}
}
printf("\nPressione uma tecla para continuar...");
getch();
}
}
/* FUNCAO PARA LISTAR TODOS OS DE ASSISTENCIA MEDICA */
void listarAssistencia(PNO *cabeca){
system("cls");
PNO ptr;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
/* printf("\t\t========Listagem de Tipo de Assistencia============"); */
if(!*cabeca) {
printf("\nNao Existe Registo de Assistencias em Memoria. Qualquer tecla para continuar");
getch();
return;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrAssistencia_Temp=ptr->dados;
printf("\nCartao numero: %s", ptrAssistencia_Temp->nomeAssUtente);
printf("Tipo de Assistencia Medica: %s \n", ptrAssistencia_Temp->descAssUtente);
}
printf("\nPressione uma tecla para continuar");
getch();
}
/* FUNCAO PARA VERIFICAR SE JA FORAM GRAVADOS OS DADOS EM MEMORIA PARA FICHEIRO */
void verificaFicheiro(){
system("cls");
char grava_Ficheiro[3];
if (listaFicheiroAlterado==TRUE) {
printf("\nExistem dados na Memoria que nao foram gravados, deseja garda-los (s/n)?:");
fflush(stdin);
fgets(grava_Ficheiro, 3, stdin);
if(grava_Ficheiro[0] == '\r' || grava_Ficheiro[0] == '\n' || grava_Ficheiro[0] != 's'){
printf("\nA informacao existente vai ser descartada e carregada a do Ficheiro de Backup" );
leFicheiro();
}
else {
gravaFicheiro(&cabecaEspecialidade, &cabecaMedico, &cabecaAssistenciamedica, &cabecaUtente, &cabecaAgendaConsultas);
}
}
else {
leFicheiro();
}
}
/* Inserir utentes*/
void insereUtente(){
system("cls");
PNO ptrTempUtente;
PUTENTES pUtentes;
char nomeUtenteTemp [20+1];
//char tipoAssitenciaTemp[30+1];
printf("\n Insira Nome do Utente: ");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
pUtentes = (PUTENTES) malloc (sizeof(UTENTES));
strcpy(pUtentes->nomeUtente,nomeUtenteTemp);
printf("\n\nIndique o tipo de Assistencia:");
fflush(stdin);
/* fgets(ptrTempUtente->tipoAssistencia, 40+1, stdin );
if(ptrTempUtente->tipoAssistencia[0] == '\r' || ptrTempUtente->tipoAssistencia[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
//fgets(tipoAssistenciaTemp, 30+1, stdin );
//if(pUtentes->tipoAssistenciaTemp[0] == '\r' || pUtentes->tipoAssistenciaTemp[0] == '\n'){
// printf("\nAtencao, deixou o campo vazio" );
//}
ptrTempUtente = criarNO(pUtentes);
insereAcabeca(&cabecaUtente,ptrTempUtente);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA PESQUISAR Utentes POR NOME */
int pesquisarUtente(PNO *cabeca, char pesquisaNomeUtente [20+1]){
PNO ptr;
PUTENTES ptrTempUtente;
int encontrado = FALSE;
if(!*cabeca) {
printf("\nNao Existem Utentes na Memoria. Qualquer tecla para continuar");
getch();
return encontrado;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempUtente=ptr->dados;
if (strcmp(ptrTempUtente->nomeUtente, pesquisaNomeUtente)==0)
printf("\nFoi encontrado e tem a Descricao:%s \n", ptrTempUtente->tipoAssistencia);
encontrado=TRUE;
}
printf("\nPressione uma tecla para continuar");
getch();
return encontrado;
}
/*ªFUNCAO PARA ALTERAR utente NUM REGISTO ExISTENTE */
void alterarUtente(PNO *cabeca){
system("cls");
char nomeUtenteTemp [20+1];
PNO ptr;
PUTENTES ptrTempUtente;
if(!*cabeca) {
printf("\nNao Existem Utentes na Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Nome do Utente: ");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){ /* Se não colocou nada */
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\n\tPressione uma tecla para continuar...");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempUtente=ptr->dados;
if (strcmp(ptrTempUtente->nomeUtente, nomeUtenteTemp)==0) {
printf("\nFoi encontrado com o tipo de Assistencia:%s \n", ptrTempUtente->tipoAssistencia);
printf("\nNovo nome: ");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao" );
}
else {
strcpy(ptrTempUtente->nomeUtente,nomeUtenteTemp);
printf("\nIndique otipo de Assistencia:");
fflush(stdin);
fgets(ptrTempUtente->tipoAssistencia, 40+1, stdin );
if(ptrTempUtente->tipoAssistencia[0] == '\r' || ptrTempUtente->tipoAssistencia[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
listaFicheiroAlterado=TRUE;
}
}
printf("\nPressione uma tecla para continuar...");
getch();
}
}
/* FUNCAO PARA APAGAR Utente PELO REGISTO DO NOME */
void apagarUtente(PNO *cabeca){
system("cls");
char apagar_Utente[3];
char nomeUtenteTemp [20+1];
PNO ptr;
PUTENTES ptrTempUtente;
if(!*cabeca) {
printf("\nNao Existem Utentes na Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Nome do Utente:");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempUtente=ptr->dados;
if (strcmp(ptrTempUtente->nomeUtente, nomeUtenteTemp)==0) {
printf("\nFoi encontrado com o tipo de Assistencia: %s \n", ptrTempUtente->tipoAssistencia);
printf("\nTem a certeza que deseja apagar (s/n)? :");
fflush(stdin);
fgets(apagar_Utente, 3, stdin);
if(apagar_Utente[0] == '\r' || apagar_Utente[0] == '\n' || apagar_Utente[0] != 's'){
printf("\nA informacao existente nao sera alterada" );
}
else {
if(ptr->ant) ptr->ant->prox = ptr->prox;
else *cabeca = ptr->prox;
if(ptr->prox) ptr->prox->ant = ptr->ant;
ptr->ant = ptr->prox = NULL;
listaFicheiroAlterado=TRUE;
printf("\nA Utente foi apagada com Sucesso\n");
}
}
}
printf("\nPressione uma tecla para continuar");
getch();
}
}
/* FUNCAO PARA LISTAR Utentes , MOSTRA O NOME E DESCRICAO */
void listarUtentes(PNO *cabeca){
system("cls");
PNO ptr;
PUTENTES ptrTempUtente;
if(!*cabeca) {
printf("\nNao Existem Utentes na Memoria. Qualquer tecla para continuar");
getch();
return;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempUtente=ptr->dados;
printf("\n:Utente %s", ptrTempUtente->nomeUtente);
printf("Assistencia: %s \n", ptrTempUtente->tipoAssistencia);
}
printf("\nPressione uma tecla para continuar");
getch();
}
/* FUNCAO PARA LER DADOS DO FICHEIRO EM DISCO */
void leFicheiro(){
system("cls");
int i, Registos_Especialidades=0, Registos_Assistencia=0;
char ficheiro[LEN_FICHEIRO+3];
PESPECIALIDADES ptrEspecialidadeMedica_Temp;
PMEDICOS ptrMedico_Temp;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
PUTENTES pTempUtente;
FILE *fp;
puts( "\n\tLer dados.\n"
"Qual o nome do ficheiro a Ler? (vazio para \"" FICHEIRO_DEFAULT "\"):");
fflush(stdin);
fgets( ficheiro, sizeof(ficheiro), stdin );
if(ficheiro[0] == '\r' || ficheiro[0] == '\n')
strcpy(ficheiro, FICHEIRO_DEFAULT);
fp = fopen( ficheiro, "rb" );
if( fp == NULL ) {
puts( "\nNao foi possivel abrir o ficheiro" );
getch();
return;
}
fread (&Registos_Especialidades, sizeof(int), 1, fp);
for(i=0; i<Registos_Especialidades;i++) {
ptrEspecialidadeMedica_Temp = (PESPECIALIDADES*) malloc (sizeof(ESPECIALIDADES));
fread(ptrEspecialidadeMedica_Temp, sizeof(ESPECIALIDADES), 1, fp);
insereAcabeca(&cabecaUtente,ptrEspecialidadeMedica_Temp);
}
fread (&Registos_Assistencia, sizeof(int), 1, fp);
for(i=0; i<Registos_Assistencia;i++) {
ptrAssistencia_Temp = (PASSISTENCIAMEDICA*) malloc (sizeof(ASSISTENCIAMEDICA));
fread(ptrAssistencia_Temp, sizeof(ASSISTENCIAMEDICA), 1, fp);
insereAcabeca(&cabecaAssistenciamedica,ptrAssistencia_Temp);
}
fclose(fp);
printf("\nO Ficheiro foi carregado correctamente");
listaFicheiroAlterado=FALSE;
printf("\nPressione uma tecla para continuar");
getch();
}
/* FUNCAO PARA GRAVAR DADOS NO FICHEIRO EM DISCO */
void gravaFicheiro(PNO *cabecaEspMedicaTemp, PNO *cabecaMedicoTemp, PNO *cabecaAssUtenteTemp, PNO *cabecaUtenteTemp, PNO *cabecaAgendaConsultasTemp){
system("cls");
int Registos_Especialidades=0, Registos_Assistencia=0;
char ficheiro[LEN_FICHEIRO+3];
PNO ptr;
PESPECIALIDADES ptrEspecialidadeMedica_Temp;
PMEDICOS ptrMedico_Temp;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
PUTENTES pTempUtente;
FILE *fp;
puts( "\n\tGravar dados.\n"
"Qual o nome do ficheiro a gravar? (vazio para \"" FICHEIRO_DEFAULT "\"):");
fflush(stdin);
fgets( ficheiro, sizeof(ficheiro), stdin );
if(ficheiro[0] == '\r' || ficheiro[0] == '\n')
strcpy(ficheiro, FICHEIRO_DEFAULT);
/* Grava os dados */
fp = fopen( ficheiro, "wb" );
if( fp == NULL ) {
puts( "\n\tNao foi possivel criar o ficheiro. Processo interrompido..." );
getch();
return;
}
if(!*cabecaEspMedicaTemp) fwrite(&Registos_Especialidades, sizeof(int), 1, fp);
else {
for (ptr=*cabecaEspMedicaTemp; ptr; ptr = ptr->prox, Registos_Especialidades++);
fwrite(&Registos_Especialidades, sizeof(int), 1, fp);
for (ptr=*cabecaEspMedicaTemp; ptr; ptr = ptr->prox) fwrite(ptr, sizeof(ESPECIALIDADES), 1, fp);
}
if(!*cabecaAssUtenteTemp) fwrite(&Registos_Assistencia, sizeof(int), 1, fp);
else {
for (ptr=*cabecaAssUtenteTemp; ptr; ptr = ptr->prox, Registos_Assistencia++);
fwrite(&Registos_Assistencia, sizeof(int), 1, fp);
for (ptr=*cabecaAssUtenteTemp; ptr; ptr = ptr->prox) fwrite(ptr, sizeof(ASSISTENCIAMEDICA), 1, fp);
}
fclose(fp);
printf("\n\tA BD foi salva em Ficheiro correctamente...");
listaFicheiroAlterado=FALSE;
printf("\n\n\tPressione uma tecla para continuar...");
getch();
}
/* A PARTIR DAQUI TEMOS A PARTE PRINCIPAL DO PROGRAMA, ONDE CHAMA AS FUNCOES NECESSARIAS PARA
RESPONDER AO SOLICITADO PELO UTILIZADOR , ATRAVEZ DOS MENUS */
int main()
{
char escolha;
do {
system("cls");
printf("\n Menu Principal\n");
printf("\n 1 - Menu Especialidades\n");
printf("\n 2 - Menu Medicos\n");
printf("\n 3 - Menu Assistencia\n");
printf("\n 4 - Menu Utentes\n");
printf("\n 5 - Menu Consultas\n");
printf("\n 6 - Menu Pesquisa\n");
printf("\n 7 - Menu Ordenar\n");
printf("\n 8 - Ler Ficheiro\n");
printf("\n 9 - Gravar Ficheiro\n");
printf("\n 0 - Sair do Programa\n");
printf("\n Escolha a Opcao:");
escolha=getch();
switch(escolha)
{
case '1':
MenuEspecialidades();
break;
case '2':
MenuMedicos();
break;
case '3':
MenuAssistenciaMedica();
break;
case '4':
MenuUtentes();
break;
case '5':
MenuConsultas();
break;
case '6':
MenuPesquisas();
break;
case '7':
MenuOrdenar();
break;
case '8':
verificaFicheiro();
break;
case '9':
gravaFicheiro(&cabecaEspecialidade, &cabecaMedico, &cabecaAssistenciamedica, &cabecaUtente, &cabecaAgendaConsultas);
break;
case '0':
fim();
break;
default:
getch();
break;
}
} while (escolha!='0');
}
void MenuEspecialidades(){
char escolhaE;
do {
system("cls");
printf("\n Menu Especialidades\n");
printf("\n 1 - Inserir Especialidade\n");
printf("\n 2 - Alterar Especialidade\n");
printf("\n 3 - Apagar Especialidade\n");
printf("\n 4 - Listar Especialidades\n");
printf("\n 0 - Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaE=getch();
switch(escolhaE) {
case '1':
insereEspecialidade();
break;
case '2':
alterarEspecialidade(&cabecaEspecialidade);
break;
case '3':
apagarEspecialidade(&cabecaEspecialidade);
break;
case '4':
listarEspecialidades(&cabecaEspecialidade);
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaE!='0');
}
void MenuMedicos(){
char escolhaM;
do {
system("cls");
printf("\n Menu Medicos\n");
printf("\n 1 - Inserir Medico\n");
printf("\n 2 - Alterar Medico\n");
printf("\n 3 - Apagar Medico\n");
printf("\n 4 - Listar Medicos\n");
printf("\n 5 - Ordenar Modicos por Nome\n");
printf("\n 6 - Ordenar Modicos por Especialidade\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaM=getch();
switch(escolhaM) {
case '1':
insereMedico();
break;
case '2':
break;
case '3':
break;
case '4':
listarMedicos(&cabecaMedico);
break;
case '5':
break;
case '6':
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaM!='0');
}
void MenuAssistenciaMedica(){
char escolhaA;
do {
system("cls");
printf("\n Menu Assistencia\n");
printf("\n 1 - Inserir nova Assistencia\n");
printf("\n 2 - Alterar Assistencia\n");
printf("\n 3 - Apagar Assistencia\n");
printf("\n 4 - Listar Assistencias existentes\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaA=getch();
switch(escolhaA) {
case '1':
insereAssistencia();
break;
case '2':
alterarAssistencia(&cabecaAssistenciamedica);
break;
case '3':
apagarAssistencia(&cabecaAssistenciamedica);
break;
case '4':
listarAssistencia(&cabecaAssistenciamedica);
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaA!='0');
}
void MenuUtentes(){
char escolhaU;
do {
system("cls");
printf("\n Menu Utentes\n");
printf("\n 1 - Inserir Utente\n");
printf("\n 2 - Alterar Utente\n");
printf("\n 3 - Apagar Utente\n");
printf("\n 4 - Listar Utente\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaU=getch();
switch(escolhaU) {
case '1':
insereUtente();
break;
case '2':
alterarUtente(&cabecaUtente);
break;
case '3':
apagarUtente(&cabecaUtente);
break;
case '4':
// listarUtente(&cabecaUtente);
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaU!='0');
}
void MenuConsultas(){
char escolhaC;
do {
system("cls");
printf("\n Menu Consultas\n");
printf("\n 1 - Marcar consulta\n");
printf("\n 2 - Alterar marcacao de consulta\n");
printf("\n 3 - Apagar consulta\n");
printf("\n 4 - Listar consultas\n");
printf("\n 5 - Pesquisar consultas por data\n");
printf("\n 6 - Pesquisar consultas por Medico\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaC=getch();
switch(escolhaC) {
case '1':
break;
case '2':
break;
case '3':
break;
case '4':
break;
case '5':
break;
case '6':
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaC!='0');
}
void MenuPesquisas(){
char escolhaP;
do {
system("cls");
printf("\n Menu Pesquisas\n");
printf("\n 1 - Pesquisar MEDICOS por Especialidade/Nome\n");
printf("\n 2 - Pesquisar Utente por Nome/numero de cartao\n");
printf("\n 3 - Pesquisar Consultas por Data/Medico\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaP=getch();
switch(escolhaP) {
case '1':
break;
case '2':
break;
case '3':
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaP!='0');
}
void MenuOrdenar()
{
char escolhaP;
do {
system("cls");
printf("\n Menu Ordenar\n");
printf("\n 1 - Ordenar MEDICOS por Especialidade/Nome\n");
printf("\n 2 - Ordenar Utente por Nome/Data de nascimento\n");
printf("\n 3 - Ordenar Consultas por Data/hora\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaP=getch();
switch(escolhaP)
{
case '1':
break;
case '2':
break;
case '3':
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaP!='0');
return 0;
}
sorry mat, this is very big! and i'm not very good programmer! so i don´t know...why this error
Also consider not using fflush(stdin) . . . .Code:1.c: In function ‘fim’:
1.c:137: warning: implicit declaration of function ‘getch’
1.c:180:16: warning: multi-character character constant
1.c: In function ‘ordenaNome’:
1.c:180: warning: comparison is always false due to limited range of data type
1.c:181: warning: ‘return’ with a value, in function returning void
1.c:183: warning: ‘return’ with a value, in function returning void
1.c: In function ‘ordenaNomeMedico’:
1.c:189: warning: ‘return’ with a value, in function returning void
1.c:191: warning: ‘return’ with a value, in function returning void
1.c: In function ‘ordenaMedicoEsp’:
1.c:197: warning: ‘return’ with a value, in function returning void
1.c:199: warning: ‘return’ with a value, in function returning void
1.c: In function ‘ordenaUtenteNome’:
1.c:205: warning: ‘return’ with a value, in function returning void
1.c:207: warning: ‘return’ with a value, in function returning void
1.c: In function ‘ordenaUtenteData’:
1.c:213: warning: ‘return’ with a value, in function returning void
1.c:215: warning: ‘return’ with a value, in function returning void
1.c:713:1: warning: "/*" within comment
1.c: In function ‘leFicheiro’:
1.c:877: warning: assignment from incompatible pointer type
1.c:879: warning: passing argument 2 of ‘insereAcabeca’ from incompatible pointer type
1.c:883: warning: assignment from incompatible pointer type
1.c:885: warning: passing argument 2 of ‘insereAcabeca’ from incompatible pointer type
1.c:861: warning: unused variable ‘pTempUtente’
1.c:859: warning: unused variable ‘ptrMedico_Temp’
1.c: In function ‘gravaFicheiro’:
1.c:905: warning: unused variable ‘pTempUtente’
1.c:904: warning: unused variable ‘ptrAssistencia_Temp’
1.c:903: warning: unused variable ‘ptrMedico_Temp’
1.c:902: warning: unused variable ‘ptrEspecialidadeMedica_Temp’
1.c: In function ‘insereUtente’:
1.c:945: warning: ‘main’ is normally a non-static function
1.c: In function ‘MenuOrdenar’:
1.c:1242: warning: ‘return’ with a value, in function returning void
1.c: In function ‘insereUtente’:
1.c:1243: error: expected declaration or statement at end of input
1.c:1243: error: expected declaration or statement at end of input
1.c:680: warning: unused variable ‘ptrTempUtente’
1.c: At top level:
1.c:897: warning: unused parameter ‘cabecaMedicoTemp’
1.c:897: warning: unused parameter ‘cabecaUtenteTemp’
1.c:897: warning: unused parameter ‘cabecaAgendaConsultasTemp’
1.c: In function ‘main’:
1.c:1002: warning: control reaches end of non-void function
i´ve tryied another IDE and the error is "sintax error at end of input", i´m cheking every line but i din´t find any mistake...
I would try using an IDE that at least has proper spelling in their error messages.
dwks , you are telling me that all this warnings are bad and corrupts my program ? thanks for the help. i´m going to follow your advise over the fflush...
Well, sure. Some of them spell trouble. It's best to fix them if you can. (You should also enable warnings on your compiler if you haven't already.)
BTW, "parse error at end of input" usually means you have more opening curly braces than closing ones. I'm not sure exactly where.
A lot of your functions look pretty similar . . . .
How come you wrote 1000+ lines of code, and have only just noticed there's a compilation problem?
Consider this for your next program.
http://cboard.cprogramming.com/showthread.php?t=88495
That is, before you dig yourself into an even bigger hole without even realising it.
Your problem is here. Be very careful when you comment out curly braces. (Or forget to terminate multi-line comments. And enable syntax highlighting so that you can see when you do this.)
I agree with Salem, though. At the very least, you could have done a little bit of modularization (putting similar code into functions).Code:/* Inserir utentes*/
void
insereUtente ()
{
system ("cls");
PNO ptrTempUtente;
PUTENTES pUtentes;
char nomeUtenteTemp[20 + 1];
//char tipoAssitenciaTemp[30+1];
printf ("\n Insira Nome do Utente: ");
fflush (stdin);
fgets (nomeUtenteTemp, 20 + 1, stdin);
if (nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n')
{
printf
("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior");
printf ("\nPressione uma tecla para continuar");
getch ();
}
else
{
pUtentes = (PUTENTES) malloc (sizeof (UTENTES));
strcpy (pUtentes->nomeUtente, nomeUtenteTemp);
printf ("\n\nIndique o tipo de Assistencia:");
fflush (stdin);
/* fgets(ptrTempUtente->tipoAssistencia, 40+1, stdin );
if(ptrTempUtente->tipoAssistencia[0] == '\r' || ptrTempUtente->tipoAssistencia[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
//fgets(tipoAssistenciaTemp, 30+1, stdin );
//if(pUtentes->tipoAssistenciaTemp[0] == '\r' || pUtentes->tipoAssistenciaTemp[0] == '\n'){
// printf("\nAtencao, deixou o campo vazio" );
//}
ptrTempUtente = criarNO(pUtentes);
insereAcabeca(&cabecaUtente,ptrTempUtente);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA PESQUISAR Utentes POR NOME */
i´m sorry i get out... but i´ve tried yours tips same worked bur i have the same error.
i reduce the number of warnings...
okay tomorrow i return and continue to work on this thanks you guys!!!
hi it seems that i can resolve it on my one! "parse error at end of input
"
Ummm... what about the comment thing? Did you fix that? Why not just get an IDE that halfway tries to help you spot indiscrepencies in code blocks and comments? VC++ Express can do that, and its free.
Well, posting your latest code and error message would certainly help us tell what you've managed to do . . .
. . . only, because it's so long, I suggest attaching it instead of putting it into code tags.
[edit] Or install Linux and get KDevelop. :) I used kate's CTRL-6 to find the missing bracket. (CTRL-6 jumps the cursor to the matching brace.) [/edit]
Or just try compiling, say, at least every ten lines or so, as Salem suggested. :)
As I was saying, though: the last seven or so functions in that code are so similar that you ought to be able to combine them into one function.
fgets() won't give you any '\r's -- only getch() will [1]. Well, you also get '\r's if you're reading a file with DOS line endings from Linux, but I don't think you need to worry about that (it looks like you're expecting user input, not redirected files).Code:printf("\nQual o Nome do Utente:");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){
[1] getch() isn't the best idea, either. It's unportable and non-standard, and often doesn't play well with standard C input functions like fgets().
Also, an explanation for my fflush comment earlier: cpwiki.sf.net/fflush
I have to admit, there is nothing more satisfying than writing an entire program (thousands of lines of code) without compiling it until the very end, and having it both compile flawlessly and run without any snags.
Even for an advanced programmer that is a foolish way of doing things, however. Your IDE gives you no indication whatsoever as to where in the code that things broke?
The whole code is one big mess:
Error 1 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 137
Error 2 error C2197: 'int (__cdecl *)(void)' : too many arguments for call g:\w00t\visual studio 2008\projects\temp\temp3.cpp 166
Error 3 error C2562: 'ordenaNome' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 181
Error 4 error C2562: 'ordenaNome' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 183
Error 5 error C2562: 'ordenaNomeMedico' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 189
Error 6 error C2562: 'ordenaNomeMedico' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 191
Error 7 error C2562: 'ordenaMedicoEsp' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 197
Error 8 error C2562: 'ordenaMedicoEsp' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 199
Error 9 error C2562: 'ordenaUtenteNome' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 205
Error 10 error C2562: 'ordenaUtenteNome' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 207
Error 11 error C2562: 'ordenaUtenteData' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 213
Error 12 error C2562: 'ordenaUtenteData' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 215
Error 13 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 234
Error 14 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 248
Error 15 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 260
Error 16 error C2440: '=' : cannot convert from 'void *' to 'PESPECIALIDADES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 264
Error 17 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 270
Error 18 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 283
Error 19 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 292
Error 20 error C2440: '=' : cannot convert from 'void *' to 'PESPECIALIDADES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 296
Error 21 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 317
Error 22 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 331
Error 23 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 340
Error 24 error C2440: '=' : cannot convert from 'void *' to 'PESPECIALIDADES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 344
Error 25 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 364
Error 26 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 376
Error 27 error C2440: '=' : cannot convert from 'void *' to 'PESPECIALIDADES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 380
Error 28 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 385
Error 29 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 406
Error 30 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 415
Error 31 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 425
Error 32 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 437
Error 33 error C2440: '=' : cannot convert from 'void *' to 'PMEDICOS' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 441
Error 34 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 447
Error 35 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 496
Error 36 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 510
Error 37 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 523
Error 38 error C2440: '=' : cannot convert from 'void *' to 'PASSISTENCIAMEDICA' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 527
Error 39 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 533
Error 40 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 547
Error 41 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 556
Error 42 error C2440: '=' : cannot convert from 'void *' to 'PASSISTENCIAMEDICA' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 560
Error 43 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 580
Error 44 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 594
Error 45 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 603
Error 46 error C2440: '=' : cannot convert from 'void *' to 'PASSISTENCIAMEDICA' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 607
Error 47 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 628
Error 48 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 641
Error 49 error C2440: '=' : cannot convert from 'void *' to 'PASSISTENCIAMEDICA' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 645
Error 50 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 650
Error 51 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 690
Error 52 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 721
Error 53 error C2440: '=' : cannot convert from 'void *' to 'PUTENTES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 725
Error 54 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 731
Error 55 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 744
Error 56 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 753
Error 57 error C2440: '=' : cannot convert from 'void *' to 'PUTENTES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 757
Error 58 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 778
Error 59 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 792
Error 60 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 801
Error 61 error C2440: '=' : cannot convert from 'void *' to 'PUTENTES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 805
Error 62 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 825
Error 63 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 837
Error 64 error C2440: '=' : cannot convert from 'void *' to 'PUTENTES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 841
Error 65 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 846
Error 66 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 872
Error 67 error C2440: '=' : cannot convert from 'PESPECIALIDADES *' to 'PESPECIALIDADES' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 877
Error 68 error C2664: 'insereAcabeca' : cannot convert parameter 2 from 'PESPECIALIDADES' to 'PNO' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 879
Error 69 error C2440: '=' : cannot convert from 'PASSISTENCIAMEDICA *' to 'PASSISTENCIAMEDICA' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 883
Error 70 error C2664: 'insereAcabeca' : cannot convert parameter 2 from 'PASSISTENCIAMEDICA' to 'PNO' g:\w00t\visual studio 2008\projects\temp\temp3.cpp 885
Error 71 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 892
Error 72 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 917
Error 73 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 939
Error 74 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 962
Error 75 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 997
Error 76 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1015
Error 77 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1033
Error 78 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1052
Error 79 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1072
Error 80 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1089
Error 81 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1107
Error 82 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1124
Error 83 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1142
Error 84 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1161
Error 85 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1179
Error 86 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1195
Error 87 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1207
Error 88 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1224
Error 89 error C3861: 'getch': identifier not found g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1238
Error 90 error C2562: 'MenuOrdenar' : 'void' function returning a value g:\w00t\visual studio 2008\projects\temp\temp3.cpp 1242
You can start by getting rid of getch. It's non-standard, and it obviously doesn't exist in Microsoft's compiler. Use getchar() instead or nothing at all.
And the actual problem lies at line 692. This snippet:
You were missing the end comment market marked by red.Code:/* fgets(ptrTempUtente->tipoAssistencia, 40+1, stdin );
if(ptrTempUtente->tipoAssistencia[0] == '\r' || ptrTempUtente->tipoAssistencia[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
//fgets(tipoAssistenciaTemp, 30+1, stdin );
//if(pUtentes->tipoAssistenciaTemp[0] == '\r' || pUtentes->tipoAssistenciaTemp[0] == '\n'){
// printf("\nAtencao, deixou o campo vazio" );
//}
ptrTempUtente = criarNO(pUtentes);
insereAcabeca(&cabecaUtente,ptrTempUtente);
listaFicheiroAlterado=TRUE;
getch();*/
}
}
/* FUNCAO PARA PESQUISAR Utentes POR NOME */
Follow these steps
1. Put this on the first line
Put this on the last line of the fileCode:#if 0
Make sure it compiles with no errors.Code:#endif
int main ( ) {
return 0;
}
2. Move the #if 0 past the includes, so now it looks like this
Make sure it compiles with no errors.Code:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if 0
3. Move it past the #defines, so it looks like this
Make sure it compiles with no errors.Code:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 0
#define FALSE 1
#define LEN_FICHEIRO 256
#define FICHEIRO_DEFAULT "dadosBin.dat"
#if 0
4. Move is past ONE typedef, so
Make sure it compiles with no errors.Code:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 0
#define FALSE 1
#define LEN_FICHEIRO 256
#define FICHEIRO_DEFAULT "dadosBin.dat"
/* ESTRUTURAS */
/* estrutura que define o no */
typedef struct no {
struct no *prox;
struct no *ant;
void *dados;
}NO;
typedef NO *PNO;
#if 0
At each stage, you MAKE SURE IT COMPILES before moving the #if 0 past the next set of declarations / function definitions or whatever.
It's a quick way of hiding a lot of code from the compiler without having to delete it.
It also means you only have to deal with a few problems at a time, rather than the mass you have at the moment.
If you do get stuck, it means you can simply delete everything between #if 0 .. #endif before posting. Then we have a lot less to look at.
hi guys its me again, my code still doesn´t work!!! help...
Have you taken the suggested steps to narrow down the problem?
Dude, can you fix the code, particularly by taking heed to Salem's suggestions then attach a copy of your newer code?
yes you are wrigth i ´sorry to take your time, its working salem, master5001
result:Code:
#if 0
/*int main()
{
char escolha;
do {
system("cls");
printf("\n Menu Principal\n");
printf("\n 1 - Menu Especialidades\n");
printf("\n 2 - Menu Medicos\n");
printf("\n 3 - Menu Assistencia\n");
printf("\n 4 - Menu Utentes\n");
printf("\n 5 - Menu Consultas\n");
printf("\n 6 - Menu Pesquisa\n");
printf("\n 7 - Menu Ordenar\n");
printf("\n 8 - Ler Ficheiro\n");
printf("\n 9 - Gravar Ficheiro\n");
printf("\n 0 - Sair do Programa\n");
printf("\n Escolha a Opcao:");
escolha=getchar();
switch(escolha)
{
case '1':
MenuEspecialidades();
break;
case '2':
MenuMedicos();
break;
case '3':
MenuAssistenciaMedica();
break;
case '4':
MenuUtentes();
break;
case '5':
MenuConsultas();
break;
case '6':
MenuPesquisas();
break;
case '7':
MenuOrdenar();
break;
case '8':
verificaFicheiro();
break;
case '9':
gravaFicheiro(&cabecaEspecialidade, &cabecaMedico, &cabecaAssistenciamedica, &cabecaUtente, &cabecaAgendaConsultas);
break;
case '0':
fim();
break;
default:
getchar();
break;
}
} while (escolha!='0');
getchar();
} */
#endif
int main () {
return 0;
E:\Programas\CodeBlocks\SourceALG\ProjectMainPGM.v 1\main.c: In function `main':
E:\Programas\CodeBlocks\SourceALG\ProjectMainPGM.v 1\main.c:1317: error: syntax error at end of input
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 1 warnings
p.s. i don´t know what more to trie...
I think you're missing a closing curly brace again. At the very end of the file. [edit] Err -- at the very end of the code you posted. [/edit]Code:#endif
int main () {
return 0;
Possibly caldeira has pieced this together from existing code, since a stray */ implies some compiling and debugging already went on.