Curso de C
Comandos Básicos
Você está em: MarMSX >> Cursos >> C
Diferente do Pascal, o C tem funções e constantes dentro de algumas bibliotecas.
Neste capítulo, serão apresentadas as principais bibliotecas do C e suas respectivas funções. Serve como um guia de referência para identificar as funções necessárias para a criação de programas.
Biblioteca STDIO.H - Entrada e saída de dados
| Função |
Descrição |
| FILE |
Variável do tipo arquivo. |
| fclose(FILE *stream) |
Fecha uma stream (arquivo). |
| feof(FILE *stream) |
Testa o fim de um arquivo. |
| fgetc(FILE *stream) |
Lê um caracter de uma stream. |
| fputc(int c, FILE *stream) |
Escreve um caracter em uma stream. |
| fgetpos(FILE *stream,
fpos_t *pos) |
Retorna a posição do ponteiro na
stream. |
| fsetpos(FILE *stream, const
fpos_t *pos) |
Ajusta o ponteiro de uma stream. |
| fgets(char *s, int n, FILE
*stream) |
Lê n caracteres de uma stream para
a string s. |
| fputs(const char *s, FILE *stream) |
Copia a string s para a stream. |
| fopen(const char *filename,
const char *mode) |
Abre uma stream. Modos, adiante. |
| printf() |
Funções de escrita. Vide tabela
abaixo. |
| scanf() |
Funções de leitura. Idem tabela
printf. |
| fread(void *ptr, size_t
size, size_t n, FILE stream) |
Transfere um bloco da stream para um
buffer. |
| fwrite(void *ptr, size_t
size, size_t n, FILE stream) |
Transfere um bloco do buffer para
uma stream. |
| fseek(FILE *stream, long
offset, int whence) |
Ajusta ponteiro de offset
posições, a partir de whence (vide abaixo). |
| EOF |
Indica fim de arquivo. |
Obs: uma stream é um arquivo de E/S aberto.
Modos de abertura de arquivo:
| Modo |
Descrição |
| r |
Somente leitura. |
| w |
Criado para escrita. |
| a |
Append (continua
arquivo existente). |
| r+ |
Abre um arquivo
existente para atualização (escrita e leitura). |
| w+ |
Cria um novo arquivo
para atualização. |
| a+ |
Append, se existente,
ou cria, se não existente. |
| t |
Arquivo texto. |
| b |
Arquivo binário |
Exemplo:
fopen("teste.bin","rb");
A opção "whence" do fseek:
| Constante |
Descrição |
| SEEK_SET |
A partir do inicio do arquivo. Valor
de SEEK_SET é 0. |
| SEEK_CUR |
A partir da posição atual. Valor
de SEEK_CUR é 1. |
| SEEK_END |
A partir do fim do arquivo. Valor
de SEEK_END é 2. |
Funções relacionadas ao printf e scanf:
| Função |
Descrição |
| printf(char*, ...) |
Envia saída formatada para a tela. |
| scanf(char*, ...) |
Lê dados do teclado. |
| fprintf(FILE *, char*, ...) |
Envia saída formatada para uma stream. |
| fscanf(FILE *, char*, ...) |
Lê uma stream e formata saída para variáveis. |
| sprintf(char*, char*, ...) |
Envia saída formatada para uma string. |
| sscanf(char*, char*, ...) |
Lê uma string e formata saídas para variáveis. |
Todas as funções acima fazem o mesmo que as funções printf e scanf. Entretanto, estas realizam operações no terminal, enquanto que as precedidas por "f" realizam operações sobre arquivos e as precedidas por "s" em strings.
Exemplo de como separar uma string em variáveis:
#include <stdio.h>
main()
{
char *dados = "Texto 123";
char texto[10];
int numero;
sscanf(dados, "%s %d", texto, &numero);
printf("O texto dos dados e': %s\n", texto);
printf("O valor numerico dos dados e': %d\n", numero);
}
Obs: as reticências na descrição dessas funções indicam que podemos colocar quantos parâmetros desejarmos. Entretanto, o número de parâmetros deverá corresponder à quantidade de variáveis indicadas na formatação utilizada na função. No exemplo acima, temos "%s" e "%d" indicados, que nos obriga a utilizar duas variáveis, sendo a primeira do tipo string e a segunda do tipo inteiro.
Exemplo de abertura de arquivo binário:
#include <stdio.h>
FILE *arquivo;
char buffer[1024];
void main(void)
{
arquivo = fopen("exemplo.bin","rb");
fread(buffer, 1024, 1, arquivo);
fseek(arquivo,40,SEEK_SET);
fclose(arquivo);
}
Para saber se tal arquivo que está sendo aberto não foi encontrado, faça o seguinte teste:
if (!fopen("exemplo.bin","rb"))
printf("Não achei teste arquivo.\n");
O capítulo 14 aborda os arquivos.
Biblioteca MATH.H - Funções matemáticas
| Função |
Descrição |
| fabs(double) |
Absoluto. abs (inteiro), cabs
(complexo), fabs(real), labs (longo). |
| floor(double) |
Trunca número real. |
| ceil(double) |
Arredonda número real |
| modf(double, double *) |
Quebra um real em uma parte inteira
e outra fracionária. |
| sqrt(double) |
Raiz quadrada. |
| atof(char *) |
Converte string para real. |
| sin(double) |
Seno. |
| cos(double) |
Cosseno. |
| tan(double) |
Tangente. |
| asin(double) |
Arco seno. |
| acos(double) |
Arco cosseno. |
| atan(double) |
Arco tangente. |
| atan2(double, double) |
Arco tangente. |
| frexp(double, int *) |
Quebra número real em mantissa e
expoente. |
| ldexp(double, int) |
Equivale a (double * 2^int) |
| log(double) |
Logaritmo natural. |
| log10(double) |
Logaritmo na base 10. |
| pow(double, double) |
x ^ y. Ex: pow(2,4) = 16. |
| exp(double) |
e ^ double |
| sinh(double) |
Seno hiperbólico. |
| cosh(double) |
Cosseno hiperbólico. |
| tanh(double) |
Tangente hiperbólico. |
Exemplo de utilização das funções matemáticas:
#include <stdio.h>
#include <math.h>
void main(void)
{
double angulo = 1.45;
printf("O seno de %f radianos é: %f",angulo,sin(angulo));
}
Não esquecer de compilar com a opção "-lf".
Biblioteca STDLIB.H - Sistema
| Função |
Descrição |
| atof(char *) |
Converte string para real. |
| atoi(char *) |
Converte string pata inteiro. |
| atol(char *) |
Converte string para longo. |
| rand(void) |
Gera número aleatório. Ex: rand()
% 100. |
| srand(unsigned int) |
Inicializa gerador de números
aleatórios. |
| calloc(size_t, size_t) |
Aloca memória principal. |
| free(void *) |
Libera memória alocada. |
| malloc(size_t) |
Aloca memória. |
| realloc(void *, size_t) |
Realoca memória principal. |
| abort(void) |
Termina um processo. |
| exit(int) |
Termina um programa. |
| getenv(char *), putenv(char
*) |
Pega uma string do meio. Coloca no
meio uma string. |
| system(char *) |
Realiza um comando de DOS. Ex:
system("dir"). |
| qsort(void *, size_t, size_t, int (*)(void *, void *)) |
Realiza uma ordenação por
quicksort. |
| abs(int) |
Valor absoluto, isto é, sem o
sinal; módulo. Para inteiros |
| labs(long) |
Valor absoluto, isto é, sem o
sinal; módulo. Para longos. |
Exemplo de geração de número aleatório:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
srand(time(NULL));
printf("Numero aleatorio entre 0 e 99: %d\n", rand() % 100);
}
Obs: para o "time.h" funcionar corretamente no MSX, é necessário adicionar um patch ao Hitech-C, localizado no diretório hitech-4/time do pacote da Funet. Copie o arquivo "time.obj" desse diretório para o disco do Hitech-C e dê o seguinte comando no MSX-DOS para instalar:
A> LIBR R LIBC.LIB TIME.OBJ
Exemplo de alocação de memória:
#include <stdlib.h>
char *buffer;
void main(void)
{
buffer = (char *) malloc(10);
}
O buffer fica com o tamanho de 10 bytes. A cada uso de malloc, 10 bytes são acrescidos ao tamanho de buffer.
O capítulo 8 fala sobre a alocação de memória.
Biblioteca STRING.H - Funções de string
| Função |
Descrição |
| memcpy(void *, void *,
size_t) |
Copia um bloco de n bytes para
destino de fonte. memcpy(dest, fonte, n). |
| memmove(void *, void *,
size_t) |
Copia um bloco de n bytes para
destino de fonte. memmove(dest, fonte, n). |
| strcpy(char *, char *) |
Copia string. Sempre destino, fonte. |
| strncpy(char *, char *,
size_t) |
Copia n caracteres. |
| strcat(char *, char *) |
Concatena string. |
| strncat(char *, char *, size_t) |
Concatena n caracteres. |
| memcmp(void *, void *, size_t) |
Compara duas strings. Retorna 0, se
foram iguais. |
| strcmp(char *, char *) |
Compara duas strings. Retorna 0, se
foram iguais. |
| strncmp(char *, char *, size_t) |
Compara duas strings, em n
caracteres. |
| strcoll(char *, size_t, char *) |
Compara duas strings. |
| memchr(void *, int, size_t) |
Procura n bytes pelo caracter c. |
| strcspn(char *, char *) |
Procura em que parte duas string tem
pontos em comum. |
| strpbrk(char *, char *) |
Procura em uma string, a primeira
ocorrência de qualquer caracter da segunda. |
| strspn(char *, char *) |
Procura em que parte duas string
passam a se diferenciar. |
| strstr(char *, char *) |
Acha a primeira ocorrência de uma
substring em uma string. |
| strtok(char *, char *) |
Procura na primeira string o
primeiro token não encontrado na segunda. |
| memset(void *, int, size_t) |
Ajusta para menos, o tamanho de uma
string. |
| strerror(int) |
Constrói uma mensagem de erro. |
| strlen(char *) |
Retorna o tamanho de uma string. |
| strchr(char *, int) |
Procura a primeira ocorrência de um
caracter. |
| strrchr(char *, int) |
Procura a última ocorrência de um
caracter. |
Exemplo de concatenação de string:
#include <stdio.h>
#include <string.h>
char pal1[10] = "arara", pal2[5] = "quara";
void main(void)
{
strcat(pal1,pal2);
printf("Pal1 agora é %s\n",pal1);
}
Saída:
Pal1 agora é araraquara.