• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Margas

Obter data no formato dd/mm/aaaa

35 mensagens neste tópico

Saudações

Após ter visto várias possibilidades, não consigo encontrar uma forma de colocar a data no formato dd/mm/aaa dentro dum membro da minha estrutura.

Agradeço qualquer ajuda.

typedef struct {
                int utnumero;/*numero do cartao*/
			char utnome[50];/*nome do utente*/
			char utente[20];/*tipo de utente*/
			//char data2[9];/*data de criacao do cartao*/
			TRANSACAO transacao[10];/*transacoes*/
			char estado[10];
		   }REGISTOS;



int num=1;
int indice=0;
REGISTOS cartoes[101];

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não podes ter um campo para o dia, outro para o mês, e outro para o ano?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <time.h>

struct tm * tm;
time_t t;

char data[20];

// código...


time(&t);
tm = localtime(&t);
strftime(data, 20, "%d-%m-%y", tm);

printf("%s", data);

É um pequeno exemplo de como podes obter a data nesse formato. Não me lembro bem mas o ano só tem dois dígitos (os 2 últimos). Para meteres com 4 dígitos tenta meter o "Y" em maiúsculo, senão procura que deves encontrar facilmente. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa noite.

Alguém me pode explicar como comparo duas strings em que uma delas está dentro dum membro duma variavel estrutrura declarada como variavel global.

A comparação que pretendo fazer é dentro da função anula().

Obrigado

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <string.h>

typedef enum{ CRG, DBT, TRF }TIPO_MOVIMENTO;
typedef enum{Bar, Livraria, Refeitorio, Reprografia, Outros }OBSERVA;

typedef struct {
            char data1[9]; /*data da transacao*/
            TIPO_MOVIMENTO movimento; /*carregamento, transferencias, debitos*/
            float montante; /*valores utilizados*/
            char data2[9];
		    float saldo1; /*saldo apos transacao*/
            OBSERVA observacoes; /*bar, livraria, etc*/
           }TRANSACAO;

//typedef enum{Aluno=0, Docente, Funcionario }TUTENTE;/*variavel tipo de utente*/
//typedef enum{Activo, Inactivo }ESTADO;/*estado do cartao activo ou inactivo*/

typedef struct {
                int utnumero;/*numero do cartao*/
			char utnome[50];/*nome do utente*/
			char utente[20];/*tipo de utente*/
			//char data2[9];/*data de criacao do cartao*/
			TRANSACAO transacao[10];/*transacoes*/
			char estado[10];
		   }REGISTOS;



int num=1;
int indice=0;
REGISTOS cartoes[101];


int menu(void);
void cria(void);
void mostra(void);
void inicia(void);
void anula(void);



int main (void) {

    int opcao;
inicia();
char estado[10];

do {
	opcao=menu();
	switch (opcao){
		case 1:	cria();
				break;
		case 2: mostra();
				break;
		case 3: anula();
				break;
		//case 4: ordenaSelectionSortNome(&alunosIP);
				break;
		//case 5: guardarGrupoFicheiroTxt(&alunosIP);
				break;
		//case 6: guardarGrupoFicheiroBin(&alunosIP);
				break;
		//case 7: lerGrupoFicheiroTxt(&alunosIP);
				break;
		//case 8: lerGrupoFicheiroBin(&alunosIP);
				break;
		case 9: ;//guardarGrupoFicheiroTxt(&alunosIP);
				   //guardarGrupoFicheiroBin(&alunosIP);
	} // switch

} while (opcao!=9);
return 0;

}

void inicia(void){
int i;
for(i=0;i<101;i++)
	cartoes[i].utnumero='\0';
}

int menu(void){

int opcao;
printf("\tMenu\n");
printf("1 - Criar cartao\n");
printf("2 - Informacao de cartoes\n");
printf("3 - Anular cartao\n");
//printf("4 - ordenar elementos por nome\n");
//printf("5 - gravar informacao no ficheiro de texto\n");
//printf("6 - gravar informacao no ficheiro binario\n");
//printf("7 - ler informacao do ficheiro de texto\n");
//printf("8 - ler informacao do ficheiro binario\n");
printf("9 - Sair\nOpcao=");
scanf("%d",&opcao);
return opcao;
}


void cria(void){

	char tipo_utente;

	printf("\n Cartao numero %d \n", num);
    cartoes[indice].utnumero=num;
	num=num+1;
	printf("Insira o nome:\n");
	fflush(stdin);
	gets(cartoes[indice].utnome);
        printf("Selecione o tipo de utente:\n 0-----Aluno\n 1-----Docente\n 2-----Funcionario\n");
	fflush(stdin);
	scanf("%c",&tipo_utente);{
		if(tipo_utente=='0')
			strcpy(cartoes[indice].utente,"Aluno");
		else if(tipo_utente=='1')
			strcpy(cartoes[indice].utente,"Docente");
		else if(tipo_utente=='2')
			strcpy(cartoes[indice].utente,"Fucionario");
		else
			printf("Opcao invalida");
		}
	strcpy(cartoes[indice].estado,"Activo");
	cartoes[indice].transacao[0].saldo1=0;
	system("cls");


	//cartoes[indice].utente=(tipo_utente=='0')?Aluno:Docente:Funcionario;
	//scanf("%[^\n]",cartoes[indice].utente);
	/*printf("Carregamento minimo: 5 euros.\n Qual o valor que deseja carregar...");
	fflush(stdin);
	scanf("%[^\n]",CARTAO[i].TRANSACAO[0].saldo1);
	CARTAO[i].estado=0;
	CARTAO[i].TRANSACAO[0].movimento=0;
	strtime(data);
	CARTAO[i].TRANSACAO[0].data2= strtime(data);*/
	indice=indice+1;

}



void mostra(void){


for(indice=0;indice<num-1;indice++)
	printf("Cartao---> %d\nNome-----> %s\nTipo-----> %s\nEstado---> %s\nSaldo----> %0.2f\n\n\n",cartoes[indice].utnumero,cartoes[indice].utnome,cartoes[indice].utente,cartoes[indice].estado,cartoes[indice].transacao[0].saldo1);
	fflush(stdin);
	system("pause");

}

void anula(void){

int c_anula, i;
int testa;
char teste[10]="Inactivo";



printf("Insira o numero do cartao a anular\n");
fflush(stdin);
scanf("%d",&c_anula);
i=c_anula-1;


	if(cartoes[i].utnumero==c_anula){

		     //printf("Cartao---> %d\nNome-----> %s\nTipo-----> %s\nEstado---> %s\n\n\n",cartoes[i].utnumero,cartoes[i].utnome,cartoes[i].utente,cartoes[i].estado,cartoes[i]);
                 //system("pause");
		     //do{
		     printf("Deseja realmente anular o cartao?\nSim(1) Nao(2)\n");
		     fflush(stdin);
                 scanf("%d",&testa);

		 	 if(testa=='1'){

					    if(strcmp(teste,cartoes[i].estado==0))
						     printf("Nao pode anular o cartao, porque ja esta Inactivo.");

						else
					 	     strcpy(cartoes[i].estado,"Inactivo");
						     printf("Cartao desactivado");

			}
			else
				printf("Ate a proxima");

	}
	else
		printf("Cartao nao existe\n");
		//system("pause");


}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas Margas conheço bem esse programa que estás a desenvolver por isso posso te ajudar

olha para obteres a data é muito simples

tens um comando para isso

strdate(p.transa.datatransacao);

é apenas isto

quanto ao comparares duas string's nesse programa tb é simples

vê este exemplo

void trocaPessoas(pessoa tabela[], int posA, int posB){

pessoa aux;

copiaCartao(&aux, tabela[posA]);

copiaCartao(&tabela[posA],tabela[posB]);

copiaCartao(&tabela[posB],aux);

}

void ordenaSelectionSortNome(grupo *g){

int posMenor;

for (int i=0; i<g->numeroCartao-1;i++)

{

posMenor= posicaoMenor(g->cartao,g->numeroCartao,i);

if (posMenor != i)

trocaPessoas(g->cartao,i,posMenor);

}

}

int posicaoMenor(pessoa tabela[],int nElem, int indiceInicial){

int posMenor=indiceInicial;

for( int i=indiceInicial+1; i<nElem;i++)

if (strcmp(tabela.nome,tabela[posMenor].nome)<0)  /* só vais ter que mudar esta linha */

posMenor=i;

return posMenor;

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a função strdate está definida em que biblioteca?

ela é standard?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a função strdate está definida em que biblioteca?

ela é standard?

Não está definida, pelo menos que eu saiba. Se calhar foi de algum programa que ele fez e a função que lhe devolvia a data chamava-se assim...

Nem nas man-pages nem no google encontrei algo sobre isso...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a função strdate está definida em que biblioteca?

ela é standard?

Não está definida, pelo menos que eu saiba. Se calhar foi de algum programa que ele fez e a função que lhe devolvia a data chamava-se assim...

Nem nas man-pages nem no google encontrei algo sobre isso...

eu encontrei uma função chamada _strdate que acho que fazia o que ele disse, mas pelo que percebi não é standard.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa tarde a todos.

Antes de mais obrigado pela vossa ajuda.

Em relação á comparação de strings resolvi duma forma mais simples uma vez que não sou muito entendido no assunto.

if(cartoes[i].estado=="Inactivo")

No entanto colocar data dentro do membro da minha variavel de estrutura ainda não está feito.

Vou tentar com a sugestão do mikest

strdate(p.transa.datatransacao);

não sei é se esta função está incluída em time.h

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No entanto colocar data dentro do membro da minha variavel de estrutura ainda não está feito.

Vou tentar com a sugestão do mikest

strdate(p.transa.datatransacao);

não sei é se esta função está incluída em time.h

Não, não está. Faz da maneira que eu disse que obtens a data tal e qual como queres. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Compreendo que sim, só que com essa função o programa não corre, e com == funciona perfeitamente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Compreendo que sim, só que com essa função o programa não corre, e com == funciona perfeitamente.

#include <string.h>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok Hipnoted, percebo o código que sugeriste, mas o problema é que não percebo como faço para colocar a informação em

cartoes[indice].data2[9]

que é o membro de estrutura da minha variavel global.Isto é, se tenho de fazer uma função só para a data e nesscaso como coloco a informação no tal membro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


#include <time.h>

struct tm * tm;
time_t t;

// código...


time(&t);
tm = localtime(&t);
strftime(cartoes[indice].data2, 20, "%d-%m-%y", tm);

printf("%s", cartoes[indice].data2);

Assim? ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Partindo do principio que coloquei da forma transmitida.

Tenho o seguinte erro;

Error e:\projecto12\proj12.c: 132  type error in argument 1 to `strftime'; found 'char' expected 'pointer to char'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já corrigi. Vê lá agora.

PS: esqueci-me de tirar os [9]...  :-[  :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

5 ESTRELAS!!!

A funcionar perfeitamente.Obrigado.

Vou continuar a minha guerra.O Deadline é 3ª e ainda me faltam as transferências entre cartões e as listagens.

Um abraço...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Este problema deve ser básico, mas ainda não consegui resolver.

Porque é que depois de pedir o numero do cartão a condição do "if" é ignorada e ele salta logo para o "else" onde diz printf("Cartao nao existe\n");.

void altera(void){
int c_altera, i2;
    char tipo_utente2;

printf("Insira o numero do cartao a alterar\n");
fflush(stdin);
scanf("%d",&c_altera);
i2=c_altera;

	if(cartoes[i2].utnumero==c_altera){
		printf("Insira novo nome:\n");
		fflush(stdin);
	    gets(cartoes[i2].utnome);
		printf("Selecione o tipo de utente:\n 0-----Aluno\n 1-----Docente\n 2-----Funcionario\n");
     	fflush(stdin);
    	scanf("%c",&tipo_utente2);
		if(tipo_utente2=='0')
			   strcpy(cartoes[i2].utente,"Aluno");
	    	else if(tipo_utente2=='1')
			   strcpy(cartoes[i2].utente,"Docente");
		    else if(tipo_utente2=='2')
			   strcpy(cartoes[i2].utente,"Fucionario");
		    else
			   printf("Opcao invalida");



	}else
		printf("Cartao nao existe\n");
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
void altera(void){
int c_altera, i2;
    char tipo_utente2;

printf("Insira o numero do cartao a alterar\n");
fflush(stdin);
scanf("%d",&c_altera);
i2=c_altera;

	if(cartoes[i2].utnumero==c_altera){//Condição que está a ser ignorada
		printf("Insira novo nome:\n");
		fflush(stdin);
	    gets(cartoes[i2].utnome);
		printf("Selecione o tipo de utente:\n 0-----Aluno\n 1-----Docente\n 2-----Funcionario\n");
     	fflush(stdin);
    	scanf("%c",&tipo_utente2);
		    if(tipo_utente2=='0')
			   strcpy(cartoes[i2].utente,"Aluno");
	    	else if(tipo_utente2=='1')
			   strcpy(cartoes[i2].utente,"Docente");
		    else if(tipo_utente2=='2')
			   strcpy(cartoes[i2].utente,"Fucionario");
		    else
			   printf("Opcao invalida");



	}else
		printf("Cartao nao existe\n");//Na execução do código salta logo para aqui...
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, só agora percebi...peço desculpa.

void altera(void){
int c_altera, i2;
    char tipo_utente2;

printf("Insira o numero do cartao a alterar\n");
fflush(stdin);
scanf("%d",&c_altera);
i2=c_altera;

	if(cartoes[i2].utnumero==c_altera){//Condição que está a ser ignorada
		printf("Insira novo nome:\n");
		fflush(stdin);
	    gets(cartoes[i2].utnome);
		printf("Selecione o tipo de utente:\n 0-----Aluno\n 1-----Docente\n 2-----Funcionario\n");
     	fflush(stdin);
    	scanf("%c",&tipo_utente2);
		    if(tipo_utente2=='0')
			   strcpy(cartoes[i2].utente,"Aluno");
	    	else if(tipo_utente2=='1')
			   strcpy(cartoes[i2].utente,"Docente");
		    else if(tipo_utente2=='2')
			   strcpy(cartoes[i2].utente,"Fucionario");
		    else
			   printf("Opcao invalida");



	}else
		printf("Cartao nao existe\n");//Na execução do código salta logo para aqui...
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

	scanf("%d",&c_altera);
i2=c_altera;

if(cartoes[i2].utnumero==c_altera){//Condição que está a ser ignorada

Tens a certeza que a condição está correcta? Estás a pedir o número do cartão, que vai servir de índice, e depois vais ver se o campo utnumero é igual ao índice. É isso que queres testar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens razão, um erro óbvio!!!!

RESOLVIDO

Obrigado.

O correcto será

i2=c_altera-1;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora