Boas, galera tenho um problema, estou tentando criar um programa que escreva para e leia de um ficheiro, acontece que consigo escrever para o ficheiro, mas o contéudo não é nada daquilo que eu escrevo na tela e quando faço o printf para o ecrã surge numeros como se fosse registos de memória alguém me pode ajudar.
Obrigado.
#include <stdio.h>
#define ESPACO 50
#define FICH "consulta.txt"
typedef struct consulta
{
int numero;
char nome[20];
char especialidade[20];
int data;
int hora;
int contacto;
} CONSULTA;
int main() {
char opcao;
CONSULTA hospital[ESPACO], tabela;
int getConsulta = 0, i, j;
FILE *fp;
while(1) {
printf("\n\nDev Testes\n");
printf("1 - Inserir Consulta\n");
printf("2 - Listar\n");
printf("3 - Ordenar por número\n");
printf("4 - Ordenar por nome\n");
printf("5 - Gravar para ficheiro\n");
printf("6 - Ler de ficheiro\n");
printf("7 - Sair\n");
printf("8 - Remover Consulta\n\n");
rewind(stdin); /* reinicio do ficheiro */
opcao = getchar();
switch(opcao) {
case '1': {
printf("Número: ");
scanf("%s", hospital[getConsulta].numero);
printf("Nome: ");
scanf("%s", hospital[getConsulta].nome);
printf("Especialidade: ");
scanf("%s", hospital[getConsulta].especialidade);
printf("Data: ");
scanf("%s", hospital[getConsulta].data);
printf("Hora: ");
scanf("%s", hospital[getConsulta].hora);
printf("Contacto: ");
scanf("%s", hospital[getConsulta].contacto);
rewind(stdin);
getConsulta++;
}
break;
/* Faz o display no ecrã dos dados recolhidos*/
case '2': {
for(i=0; i<getConsulta; i++) {
printf("Numero: %u\n",&hospital[getConsulta].numero);
printf("Nome: %u\n",&hospital[getConsulta].nome);
printf("Especialidade: %u\n",&hospital[getConsulta].especialidade);
printf("Data: %u\n",&hospital[getConsulta].data);
printf("Hora: %u\n",&hospital[getConsulta].hora);
printf("Contacto: %u\n",&hospital[getConsulta].contacto);
}
}
break;
/* Ordenar por numero*/
case '3': {
for(i=0; i<getConsulta; i++){
for(j=0; j<getConsulta-i-1; j++){
if(hospital[j].numero > hospital[j+1].numero) {
tabela = hospital[j];
hospital[j] = hospital[j+1];
hospital[j+1] = tabela;
}
}
}
}
break;
/* Ordenar por nome*/
case '4': {
for(i=0; i<getConsulta; i++){
for(j=0; j<getConsulta-i-1; j++){
if( strcmp(hospital[j].nome, hospital[j+1].nome)==1 ) {
tabela = hospital[j];
hospital[j] = hospital[j+1];
hospital[j+1] = tabela;
}
}
}
}
break;
/* Gravar para ficheiro*/
case '5': {
fp = fopen(FICH, "w");
fwrite(&getConsulta, sizeof(int), 1, fp);
fwrite(hospital, sizeof(CONSULTA), ESPACO, fp);
fclose(fp);
}
break;
/* Ler o ficheiro*/
case '6': {
fp = fopen(FICH, "r");
fread(&getConsulta, sizeof(int), 1, fp);
fread(hospital, sizeof(CONSULTA), ESPACO, fp);
fclose(fp);
}
break;
/* Sair */
case '7':
exit(0);
}
}
}
Pergunta
krs123
Boas, galera tenho um problema, estou tentando criar um programa que escreva para e leia de um ficheiro, acontece que consigo escrever para o ficheiro, mas o contéudo não é nada daquilo que eu escrevo na tela e quando faço o printf para o ecrã surge numeros como se fosse registos de memória alguém me pode ajudar.
Obrigado.
#include <stdio.h> #define ESPACO 50 #define FICH "consulta.txt" typedef struct consulta { int numero; char nome[20]; char especialidade[20]; int data; int hora; int contacto; } CONSULTA; int main() { char opcao; CONSULTA hospital[ESPACO], tabela; int getConsulta = 0, i, j; FILE *fp; while(1) { printf("\n\nDev Testes\n"); printf("1 - Inserir Consulta\n"); printf("2 - Listar\n"); printf("3 - Ordenar por número\n"); printf("4 - Ordenar por nome\n"); printf("5 - Gravar para ficheiro\n"); printf("6 - Ler de ficheiro\n"); printf("7 - Sair\n"); printf("8 - Remover Consulta\n\n"); rewind(stdin); /* reinicio do ficheiro */ opcao = getchar(); switch(opcao) { case '1': { printf("Número: "); scanf("%s", hospital[getConsulta].numero); printf("Nome: "); scanf("%s", hospital[getConsulta].nome); printf("Especialidade: "); scanf("%s", hospital[getConsulta].especialidade); printf("Data: "); scanf("%s", hospital[getConsulta].data); printf("Hora: "); scanf("%s", hospital[getConsulta].hora); printf("Contacto: "); scanf("%s", hospital[getConsulta].contacto); rewind(stdin); getConsulta++; } break; /* Faz o display no ecrã dos dados recolhidos*/ case '2': { for(i=0; i<getConsulta; i++) { printf("Numero: %u\n",&hospital[getConsulta].numero); printf("Nome: %u\n",&hospital[getConsulta].nome); printf("Especialidade: %u\n",&hospital[getConsulta].especialidade); printf("Data: %u\n",&hospital[getConsulta].data); printf("Hora: %u\n",&hospital[getConsulta].hora); printf("Contacto: %u\n",&hospital[getConsulta].contacto); } } break; /* Ordenar por numero*/ case '3': { for(i=0; i<getConsulta; i++){ for(j=0; j<getConsulta-i-1; j++){ if(hospital[j].numero > hospital[j+1].numero) { tabela = hospital[j]; hospital[j] = hospital[j+1]; hospital[j+1] = tabela; } } } } break; /* Ordenar por nome*/ case '4': { for(i=0; i<getConsulta; i++){ for(j=0; j<getConsulta-i-1; j++){ if( strcmp(hospital[j].nome, hospital[j+1].nome)==1 ) { tabela = hospital[j]; hospital[j] = hospital[j+1]; hospital[j+1] = tabela; } } } } break; /* Gravar para ficheiro*/ case '5': { fp = fopen(FICH, "w"); fwrite(&getConsulta, sizeof(int), 1, fp); fwrite(hospital, sizeof(CONSULTA), ESPACO, fp); fclose(fp); } break; /* Ler o ficheiro*/ case '6': { fp = fopen(FICH, "r"); fread(&getConsulta, sizeof(int), 1, fp); fread(hospital, sizeof(CONSULTA), ESPACO, fp); fclose(fp); } break; /* Sair */ case '7': exit(0); } } }Editado por krs123Link para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.