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.
A ICLib tem contém as seguintes funções reduzidas:
Além das supracitadas, a ICLib possui as seguintes funções próprias:
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.
A função ic_getchar() lê um caractere do arquivo de entradas e o retorna.
A função ic_gets() lê uma cadeia de caracteres (string) do arquivo de entradas e a coloca na string apontada por *str.
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).
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:
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.
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.
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.
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:
Exemplo (considerando o nome do usuário como “aluno_numero_1” e a id do exercício como “exercicio1”):
Obs.: estes arquivos devem estar no mesmo diretório do programa.
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:
Exemplo (considerando o nome do usuário como “aluno_numero_1” e a id do exercício como “exercicio1”):
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.
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; }
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; }
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; }