1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda função em C

Discussão em 'Programação' iniciada por rekateka, 30 de Junho de 2008. (Respostas: 8; Visualizações: 1723)

  1. Alguém me pode explicar o que faz esta função por favor ?

    A função é:

    Código:
    void limpa_ecran() {
    int i;
    for (i=0;i<30;i++)
    putchar('\n');
    }
    Percebo que a função limpa o ecrã, mas não percebo o que o ciclo for e o putchar ('\n') faz aí. Alguém me pode ajudar ? Tenho tado a estudar um programa e a percebê-lo e tinha lá isso. Agradeço se me puderem ajudar.

    Cumprimentos !
     
    Última edição pelo moderador: 30 de Junho de 2008
  2. hYpe

    hYpe [email protected] Member

    O ciclo faz com que o conjunto de instruções que estão lá dentro seja executado 30 vezes.

    O putchar põe um caracter no ecrã.

    O '\n' é uma quebra de linha (uma linha nova entenda-se).

    Portanto, falando não tecnicamente, vais por 30 linhas vazias no ecran, dando a ilusão de que este foi limpo.
     
  3. Olá
    o \n tem o significado de nova linha.
    como está num ciclo de 0 até 30 vais imprimir 30 novas linhas.
    como uma nova linha não imprime nada no ecra, vais imprimir 30 nadas no ecra.

    No codigo abaixo estou a imprimir o "linha", seguido do indice do ciclo, talvez te ajude a perceber.

    Código:
    void limpa_ecran() {
    int i;
    for (i=0;i<30;i++){
    putchar('\n');
    printf("linha %d",i);
    }
    }
    Cumps.
     
    Última edição pelo moderador: 30 de Junho de 2008
  4. Muito obrigado, já percebi com a vossa explicação amigos.

    Cumprimentos :p
     
  5. Boa tarde pessoal ! Alguém me pode explicar mais ou menos como funciona este código ? Basicamente o programa tem uma base de dados, e ao abrir o programa para consultar uma lista de peças de motas, ele vai ler o ficheiro. Portanto ele corre um ciclo que lê a lista de peças existentes no programa a partir da peça 0 certo ?

    O que não percebo muito bem é mais esta parte:
    Código:
    buf2= strstr(buf,";");
    *buf2='\0';
    sscanf(buf,"%s",p->tipo);
    buf=buf2+1;
    ____________________________________________________________________________

    Código:
    le_linha_ficheiro(f,buffer);/*le todas as linhas do ficheiro referentes a lista de pecas*/
    sscanf(buffer,"%d;\n",&npecas);
    for (i=0;i<npecas;i++) {/*corre lista de pecas a partir da posicao 0*/
    p = nova_peca(0);
     
    le_linha_ficheiro(f,buffer);
     
    buf=buffer;/*Buffer é uma pequena área de memória usada para escrita e leitura de dados, 
    e faz uma leitura rápida*/
    buf2= strstr(buf,";");
    *buf2='\0';
    sscanf(buf,"%d",&(p->id));/*sscanf é análoga a printf,
    lê da string str e interpreta ela de acordo com o formato especificado.*/
    buf=buf2+1;
    buf2= strstr(buf,";");
    *buf2='\0';
    sscanf(buf,"%s",p->tipo);
    buf=buf2+1;
    buf2= strstr(buf,";");
    *buf2='\0';
    sscanf(buf,"%s",p->desig);
    buf=buf2+1;
    buf2= strstr(buf,";");
    *buf2='\0';
    sscanf(buf,"%f",&(p->preco));
    buf=buf2+1;
    buf2= strstr(buf,";");
    *buf2='\0';
    sscanf(buf,"%s",p->marca);
     
     
    mostra_peca(p);
     
    Última edição pelo moderador: 3 de Julho de 2008
  6. AragTey

    AragTey Power Member

    Esse codigo procura na string buf por ";" e depois coloca la o '\0' que é o caracter terminador. Parece-me que serve apenas para nao ler o ';' da string buf como fazendo parte do texto.

    tipo se tiveres "abcd;" server para leres de buf apenas "abcd".

    buf=buf2+1 serve para avancares uma posicao na string e saltares o \0 que acabaste de por.
     
  7. limas123

    limas123 Power Member

    Exacto, a funçao strstr(const char *s1,const char* s2), devolve um apontador para a posiçao em que encontra a palavra contina em s2 na string s1, devolve NULL caso não encontre nada.
    em *buf2='\0'; ele vai ao caracter apontado pelo endereço obtido na funçao anterior e iguala-o a '\0', que serve para terminar a string.
    Seria o mesmo que fazer:

    strncpy (buf2,"\0",1);
     
  8. Obrigado, já percebi o programa todo, so me faz confusão esta função pois não conheco muito bem. Sei que retorna um valor diferente de 0 se o caracter inserido foi um caracter de espaçamento segundo a definição de isspace.

    while (isspace(opcao = le_char())) {}


    Este código estava metido antes do switch seguido dos cases.. Basicamente o que é que faz ? :s
     
  9. Baderous

    Baderous Banido

    A operação
    Código:
    opcao = le_char()
    lê um caracter que é guardado na variável opcao. Depois é invocada a função isspace que tem como argumento a variável opcao, isto é, o valor que ela contém. Em função desse valor ser um <ESPAÇO> ou não, a função isspace devolve False (0) ou True (!=0). O ciclo while tem como parâmetro esse valor que funciona como um booleano. Basicamente, enquanto o caracter lido for um espaço, faz qualquer coisa.
     

Partilhar esta Página