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