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

Sign in to follow this  
speedy

cursor

Recommended Posts

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 ;)

Share this post


Link to post
Share on other sites
speedy

obrigado, pessoal, vo ver ja isso.

e quant à outra pergunta? ninguem tem ideia do que se possa fazer?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 ;)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
speedy

to a perceber. o que nao to a perceber é, como é que tendo o valor 1, ele continua a escrever o 70 no ficheiro....

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.