Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

speedy

cursor

Mensagens Recomendadas

speedy

boas.

Estou aqui num dilema...

Tenho uns dados para receber, nomeadamente data e hora. e, obviamente, tenho de fazer a verificaçao dos dados introduzidos. A minha intençao era, se os dados fossem mal introduzidos, reescrever apenas aquela linha, deixando tudo o resto como estava.

atraves da analise de um exercicio resolvido ja pelo meu professor, encontrei uma função para posicionar o cursor. a minha ideia era "encontrar" as coordenadas actuais do cursor, e posiciona-lo uma linha acima.

alguem me pode ajudar, sff?

e ja agora, outra perguntinha:da para mudar o charset em c? é que o bicho embirra com os ~, º, ^, etc. e como agora tenho de fazer o projecto final,sempre ficava um bocadinho mais catita e podia contar mais uns quantos valores ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Muitas ideias, esse é o problema. Depende da plataforma para a qual estás a programar (para utilizar funções do sistema), ou das bibliotecas a que tens acesso (por exemplo, a conio tem funções de posicionamento de cursor).

Além disso , a pesquisa no fórum é tua amiga: procura por posicionar cursor em http://www.portugal-a-programar.org/forum/index.php?action=search


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
speedy

pois, é ideias a mais, normalmente é sempre o meu problema.

de facto esqueci-me da pesquisa (sorry). mas agora que a fiz, nao encontrei assim nada de revelante.

o meu problema tamb+em será falta de tempo para as implementar. vou-me cingir ao que o prof pede no projecto e o resto, paciencia.

obrigado na mesma ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

lol, não me estava a referir a ti quando falei em muitas ideias, mas às várias hipóteses a considerar para chegar ao resultado que pretendes :) Acho porreiro que queiras acrescentar valor ao teu projecto, só te fica bem!


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
speedy

pessoal, deparei-me com um problema.

tenho uma variavel inteira, com o nº de registos que haverá no ficheiro. e, ao acrescentar mais uma linha ao ficheiro, depois de pedir os campos todos, é suposto incrementar a variavel, a qual é passado o endereço de memoria para a função em causa. a linha que o está a fazer, obviamente, é a seguinte:

*nreg++;

o problema é que nao funciona. ao mostrar os valores dentro da funçao, este diz que incrementa de 0 para 70, mas ao voltar ao menu, ele diz-me 0. porem , se em  vez de incrementar, fizer:

*nreg+=1;

ele ja da perfeitamente. alguem sabe o porque disto?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers

O C é uma linguagem complexa e é preciso ter cuidado com a precedência dos operadores.

*nreg++;

Na verdade é equivalente a

*(nreg++)

Ou seja, estás a modificar o endereço de memória do apontador e não o conteúdo desse endereço. Enquanto que

*nreg+=1;

é equivalente ao que pretendes:

(*nreg)+=1;

Isto porque, como podes ver na tabela que indiquei, o operador de desreferenciação tem menor precedência do que o postfix ++ e tem maior precedência do que o +=


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers

Como deves compreender, sem saber o teu código é quase impossível ajudar numa dúvida destas...


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
speedy

pois, esqueci-me disso xD

ca está ele:

//Projecto Final - Programação
//Calendario de Provas de Avaliação
#include <stdio.h>
#include <string.h>



typedef struct{
        int d,m,y;
}date;
typedef struct{
        int h,m;
}time;
typedef struct{
        date data;
        time hora;
        char sala[];
}det;
typedef struct
{
        int nt,stt,id;
        det *test;
        det exam[2];
        char cad[100];
}prov;


void prt(){
     int i, n,j;
     prov cade;
     FILE *f;
     char o;
     
     system("cls");

     if(!(f=fopen("c:\\prov.txt","r")))
          printf("ERRO AO ABRIR O FICHEIRO");
     else{
         fscanf(f,"%d",&n);
          while(!(EOF) && o=='P'){
               fscanf(f,"%d",&cade.nt);
               for(i=0;i<cade.nt;i++){
                    fscanf(f,"\n%d\n%d\n%d\n%d\n%d",&cade.test[i].data.d ,&cade.test[i].data.m ,&cade.test[i].data.y ,&cade.test[i].hora.h ,&cade.test[i].hora.m);
                    printf("\n%d\n%d\n%d\n%d\n%d",&cade.test[i].data.d ,&cade.test[i].data.m ,&cade.test[i].data.y ,&cade.test[i].hora.h ,&cade.test[i].hora.m);
               }
               for(i=0;i<cade.nt;i++){
                    fscanf(f,"\n%d\n%d\n%d\n%d\n%d",&cade.exam[i].data.d ,&cade.exam[i].data.m ,&cade.exam[i].data.y ,&cade.exam[i].hora.h ,&cade.exam[i].hora.m);
                    printf("\n%d\n%d\n%d\n%d\n%d",&cade.exam[i].data.d ,&cade.exam[i].data.m ,&cade.exam[i].data.y ,&cade.exam[i].hora.h ,&cade.exam[i].hora.m);
               }
               printf("[P]roximo ou [s]air");
               o=toupper(getch());
          }
          fclose(f);
     }     
}



void insert(/*prov *c, int *nreg*/){
     int i, nreg,j=0;
     char o;
     prov cade;
     FILE *f;
    
    system("cls");
  //   cade=(prov*)calloc(1,sizeof(prov));
     if(!(f=fopen("c:\\prov.txt","r")))
          printf("ERRO: NAO HA REGISTOS NO FICHEIRO");
     else{
          fscanf(f,"%d",&nreg);
          fclose(f);
     }
    /*      cade=(prov*)realloc(cade,sizeof(cade)+1);
          while(!(EOF)){
            fscanf(f,"%d",&cade[j].nt);
            for(j=0;j<nreg;j++){   
               for(i=0;i<cade[j].nt;i++){
                    fscanf(f,"\n%d\n%d\n%d\n%d\n%d",&cade[j].test[i].data.d ,&cade[j].test[i].data.m ,&cade[j].test[i].data.y ,&cade[j].test[i].hora.h ,&cade[j].test[i].hora.m);
                    printf("\n%d\n%d\n%d\n%d\n%d",&cade[j].test[i].data.d ,&cade[j].test[i].data.m ,&cade[j].test[i].data.y ,&cade[j].test[i].hora.h ,&cade[j].test[i].hora.m);
               }
               for(i=0;i<2;i++){
                    fscanf(f,"\n%d\n%d\n%d\n%d\n%d",&cade[j].exam[i].data.d ,&cade[j].exam[i].data.m ,&cade[j].exam[i].data.y ,&cade[j].exam[i].hora.h ,&cade[j].exam[i].hora.m);
                    printf("\n%d\n%d\n%d\n%d\n%d",&cade[j].exam[i].data.d ,&cade[j].exam[i].data.m ,&cade[j].exam[i].data.y ,&cade[j].exam[i].hora.h ,&cade[j].exam[i].hora.m);
               }
            }
          }
          fclose(f);
     }  
      
     cade=(prov*)realloc(cade,sizeof(cade)+1);
          system("cls");
     
     
     j=++;
     */
     do{
        printf("Qual a cadeira?\n");
        gets(cade.cad);

        system("cls");

        for (i=0; i<100;i++)
            cade.cad[i]=toupper(cade.cad[i]);

        printf("Quantos Testes/Mini-testes vao ser realizados?");    
        scanf("%d",&cade.nt);
     
        cade.test=(det*)calloc(cade.nt,sizeof(det));
     
        for(i=0;i<cade.nt;i++){
          system("cls");                       
          printf("%d º teste:", i+1);
          printf("\tDia:"); scanf("%d",&cade.test[i].data.d);
          printf("\t\tMes:"); scanf("%d",&cade.test[i].data.m);
          printf("\t\tAno:"); scanf("%d",&cade.test[i].data.y);
           
          printf("\n\t\tHora:"); scanf("%d",&cade.test[i].hora.h); 
          printf("\t\tMinutos:"); scanf("%d",&cade.test[i].hora.m);
    
        }
        for(i=0;i<2;i++){
          system("cls");                       
          printf("%d º Exame:", i+1);
          printf("\tDia:"); scanf("%d",&cade.exam[i].data.d);
          printf("\t\tMes:"); scanf("%d",&cade.exam[i].data.m);
          printf("\t\tAno:"); scanf("%d",&cade.exam[i].data.y);
              
          printf("\n\t\tHora:"); scanf("%d",&cade.exam[i].hora.h);
          printf("\t\tMinutos:"); scanf("%d",&cade.exam[i].hora.m);
        }
        system("cls");
     
        printf("NOME DA CADEIRA:"); puts(cade.cad);
        for(i=0; i<cade.nt; i++)
          printf("\n\tTESTE %d: %d-%d-%d, %dH%dM", i+1, cade.test[i].data.d, cade.test[i].data.m, cade.test[i].data.y, cade.test[i].hora.h, cade.test[i].hora.m);
        printf("\n");
        for(i=0;i<2;i++)
          printf("\n\tEXAME %d: %d-%d-%d, %dH%dM", i+1, cade.exam[i].data.d, cade.exam[i].data.m, cade.exam[i].data.y, cade.exam[i].hora.h, cade.exam[i].hora.m);
        
        do{
           printf("\n\n\nA informacao esta correcta? S/N");
           o=toupper(getch());
        }while(o!='S' && o!='N');
        
        system("cls");
     }while(o!='S');  
     printf("%d", nreg);
     system("pause");
     
/*       *c=cade;
         n=*nreg;
         printf("%d", n);
        system("pause");
  */   
  

     if(!(f=fopen("c:\\prov.txt","w"))){
          printf("ERRO AO GRAVAR");
          system("pause");                                                                              
     }else{
           fprintf(f, "\n%d\n", nreg+1);
           for(j=0; j<nreg; j++){ 
              fputs(cade.cad,f);
              fprintf(f,"\n%d\n",cade.nt);
              for(i=0;i<cade.nt;i++)
                   fprintf(f,"%d\n%d\n%d\n%d\n&d\n", cade.test[i].data.d,cade.test[i].data.m,cade.test[i].data.y,cade.test[i].hora.h,cade.test[i].hora.m);
              for(i=0;i<2;i++)
                   fprintf(f,"%d\n%d\n%d\n%d\n&d\n", cade.exam[i].data.d,cade.exam[i].data.m,cade.exam[i].data.y,cade.exam[i].hora.h,cade.exam[i].hora.m);
              fprintf(f,"%d",1);
           }
           fclose(f);
              
     }
}

    
main (){
      char opc;
      prov *ca;
      int n, i, j, NR, aux;
      FILE *f;
       
      if(!(f=fopen("c:\\prov.txt","r")))
  {
        if(!(f=fopen("c:\\prov.txt","w")))
	    exit(0);
	else{
	    fprintf(f,"%d",0);
	    fclose(f);
	    f=fopen("c:\\prov.txt","r");
            };
      };
            
      ca=(prov*)calloc(n,sizeof(prov));

  fscanf(f,"%d",&NR);
  printf("\t\t\tNUMERO DE REGISTOS ENCONTRADOS: %d", NR);
  while(!(EOF)){
              ca=(prov*)realloc(ca,sizeof(ca)+1);
              fscanf(f,"%c",ca[i].cad);
              fscanf(f,"%d",ca[i].nt);
              for(j=0;j<ca[i].nt;j++)
                   fscanf(f,"%d\n%d\n%d\n%d\n&d\n", &ca[i].test[j].data.d, &ca[i].test[j].data.m, &ca[i].test[j].data.y, &ca[i].test[j].hora.h,&ca[i].test[j].hora.m);
              for(j=0;j<ca[i].nt;j++)
                   fscanf(f,"%d\n%d\n%d\n%d\n&d\n", &ca[i].exam[j].data.d, &ca[i].exam[j].data.m, &ca[i].exam[j].data.y, &ca[i].exam[j].hora.h,&ca[i].exam[j].hora.m);
      }
  fclose(f);
  printf("\n\n\n\t\tFicheiro Lido \n\t");
  system("pause");
  system("cls");
      
      
      do{
         system("cls");
         
         printf("\t\t\tNUMERO DE REGISTOS ENCONTRADOS: %d\n\n", NR);
         printf("[L]istar as provas.");
         printf("\n[i]nserir nova prova.");
         printf("\n[E]liminar prova.");
         printf("\n[M]udar status da prova.");
         printf("\n\n[s]air");
      
         opc=toupper(getch());
         
         
         switch (opc){
                case 'L': 
                        //aux=sizeof(ca);
                        //for (aux=0;aux<=sizeof(ca);aux++)
                        prt(/*&ca[aux]*/);
                        break;;
                case 'I':
                        ca=(prov*)realloc(ca,sizeof(ca)+1);
                        aux=sizeof(ca);
                        insert(/*&ca[aux], &NR*/);
                        break;;   
         }                
   }while(opc!='S');
}
}

o resultado do ficheiro apos inserir a 1ª prova é o seguinte

1

ALGEBRA

1

1

1

1

1

&d

2

2

2

2

&d

3

3

3

3

&d

1

um promenor que me faz confusão são os %d ali no meio do ficheiro. isso é normal?

editei o codigo pelo mais recente. Agora, já nao ter problemas em gravar, mas o bicho, no menu, ao escolher a opçao L (para  a funçao prt), ta a ir parar à insert. alguem ve algo que eu ainda nao vi?

PS: está ai uma cambada de comentarios. nao liguem, que fui eu que andei a fazer mudanças xD

PS2: quem ta a ver o codigo a ser constantemente alterado, so eu que vo fazendo mudanças e vo alterando o codigo quando resolvo os problemas

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.