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.