ICLib

Este projeto foi descontinuado, veja o Huxley.

A ICLib é uma biblioteca criada em C com a proposta de auxiliar na correção de exercícios. Suas funções são semelhantes, contudo reduzidas para o devido propósito, às existentes no cabeçalho stdio.h (ver lista de funções). A diferença reside no fato de, ao invés de lerem e escreverem nos arquivos padrão stdin e stdout (respectivamente), elas lêem e escrevem em arquivos de entrada e saída determinados pelo usuário - sem que este precise saber manipular arquivos.

Lista de Funções

A ICLib tem contém as seguintes funções reduzidas:

  • ic_getchar( ), referente a getchar( );
  • ic_gets( ), referente a gets( );
  • ic_printf( ), referente a printf( );
  • ic_puts( ), referente a puts( );
  • ic_putchar( ), referente a putchar( );
  • ic_scanf( ), referente a scanf( ).

Além das supracitadas, a ICLib possui as seguintes funções próprias:

  • ICLIB_END( );
  • ICLIB_BEGIN( ).

Descrição das Funções

void ICLIB_END()

A função ICLIB_END() finaliza a API fechando os arquivos utilizados por ela. Deste modo, ela deve ser chamada logo antes do do fim do programa. Ela não retorna valor algum.

char ic_getchar()

A função ic_getchar() lê um caractere do arquivo de entradas e o retorna.

int ic_gets(char *str)

A função ic_gets() lê uma cadeia de caracteres (string) do arquivo de entradas e a coloca na string apontada por *str.

int ICLIB_BEGIN(char *name, char *exerc_id)

A função ICLIB_BEGIN() inicializa a API abrindo os arquivos utilizados por ela. Assim ela deve ser chamada logo após a declaração das variáveis. Ela recebe como argumento duas strings: o nome do aluno – que deve estar todo em caixa baixa e com os nomes separados por linhas (_), ao invés de espaços – e o código do exercício (doravante chamado de id do exercício).

int ic_printf(const char *format, …)

A função ic_printf() é uma função de escrita formatada. Ela escreve no arquivo de saídas os valores das variáveis passadas como argumento. Ela retorna um valor inteiro que sera: -1 se algum erro na execução da função, ou um numero maior ou igual a 0 (zero) que é referente ao número de variáveis escritas no arquivo. Ela também escreve a string *format na tela.

Como visto, para se imprimir um determinado valor em uma posição do texto, utiliza-se o caractere '%' seguido de um comando de c,d ou i,u,f, ou s, de modo que, para se escrever na tela o caractere '%' deve se escrever “%%”.

Obs.: a função ic_printf() não suporta Especificadores de Largura Mínima de Campo, exemplo:

  • %2d
  • %9.4f
  • %.2f

void ic_puts(char *str)

A função ic_puts() escreve a string apontada por *str no arquivo de saídas e na tela. Ela não retorna valor algum.

void ic_putchar(char ch)

A função ic_putchar() escreve o caractere passado como argumento no arquivo de saídas e na tela. Ela não retorna valor algum.

int ic_scanf(const char *format,...)

A função ic_scanf() e uma função de entrada formata. Ela lê valores do arquivo de entradas - os tipos das variáveis são informados por *format - e os coloca nos endereços de memória passados como argumento. Retorna um valor inteiro -1 (menos um) se ocorreu algum erro na execução da função, ou um número maior ou igual a 0 (zero) que é referente ao número de variáveis lidas.

Nome dos Arquivos de Entradas de Saídas

Como já foi dito, a ICLib trabalha com leitura e escrita de arquivos definidos pelo usuário – sem que ele, necessariamente, saiba manipular arquivos. Mas esses arquivos seguem um padrão de nomenclatura. Tendo visto a função ICLIB_BEGIN(), e que ela recebe como parâmetros o nome do usuário e a id do exercício, podemos determinar como serão - e como devem ser - os nomes dos arquivos de entradas e saídas. Segue-se às seguintes fórmulas para se escrever o nome dos arquivos:

  • Arquivo de entradas: entradas_[id_do_exercicio].txt
  • Arquivo de saídas (será criado pelo programa): [nome_do_aluno]_[id_do_exercicio].txt

Exemplo (considerando o nome do usuário como “aluno_numero_1” e a id do exercício como “exercicio1”):

  • Entradas: entradas_exercicio1.txt
  • Saídas: aluno_numero_1_exercicio1.txt

Obs.: estes arquivos devem estar no mesmo diretório do programa.

Nome dos Arquivos-Reposta (Programas *.c)

Assim como os arquivos de entradas e saídas, os arquivos *.c também devem ter um nome específico para cada exercício - e aluno. Segue-se à seguinte fórmula para se escrever o nome do arquivo *.c:

  • [nome_do_aluno]_[id_do_exercicio].c

Exemplo (considerando o nome do usuário como “aluno_numero_1” e a id do exercício como “exercicio1”):

  • aluno_numero_1_exercicio1.c

Escrita e Leitura nos Arquivos

Em ambos arquivos (entradas e saídas) os valores que ocuparão ou são oriundos (respectivamente) de variáveis são lidos e escritos um por linha.

Exemplos

  • ic_getchar() e ic_putchar()

RoadMap

#include<iclib.h> int main() { char ch; ICLIB_BEGIN("aluno1","ex01"); /* Lê um caractere do arquivo de entradas. */ ch = ic_getchar(); /* Escreve um caractere no arquivo de saídas. */ ic_putchar(ch); ICLIB_END(); return 0; }

  • ic_gets() e ic_puts()

RoadMap

#include<iclib.h> int main() { char str[81]; ICLIB_BEGIN("aluno1","ex01"); /* Lê uma string do arquivo de entradas. */ ic_gets( str ); /* Escreve uma string no arquivo de saídas. */ ic_puts( str ); ICLIB_END(); return 0; }

  • ic_scanf() e ic_printf()

RoadMap

#include<iclib.h> int main() { int i; float f; double d; char ch; char str[81]; ICLIB_BEGIN("aluno1","ex01"); /* Lê um inteiro, um float, um double, um caractere e uma string do arquivo de entradas. */ ic_scanf("%d %f %lf %c %s", &i, &f, &d, &ch, str); /* Escreve um inteiro, um float, um double, um caractere e uma string no arquivo de saídas. */ ic_printf("Valor do inteiro eh: %d\nO valor do float eh: %f\nO valor do double eh: %f\n O caractere eh: %c\nA string eh: %s", i, f, d, ch, str); /* Só são escritos os valores das variáveis. As frase "O valor de...\n" não são. Todo texto é exibido na tela. */ ICLIB_END(); return 0; }

Downloads

ICLib 1.0 - 01/09/2009