C oferece diversos tipos de variáveis, incluindo:
- Inteiros (int): Armazenam números inteiros, podendo ser modificados por palavras-chave como unsigned e long.
- Ponto Flutuante (float): Armazenam números com parte decimal.
- Caracteres (char): Armazenam caracteres individuais.
- Ponteiros (*): Referenciam o endereço de memória de uma variável.
Ao utilizar a função printf, os principais formatos de saída incluem:
- %c: Caractere.
- %d: Inteiro.
- %f: Ponto flutuante.
- %s: String.
- printf: Exibe dados na saída padrão.
- scanf: Lê dados da entrada padrão. Utiliza formatos como %d, %f, %c, %s para interpretar os dados de entrada.
- Unários: +, -, ++, --.
- Binários: +, -, *, /, %, ==, !=, &&, ||, entre outros.
C oferece comandos de repetição, como:
- for: Executa um bloco de código um número específico de vezes.
- while: Executa um bloco enquanto uma condição é verdadeira.
- do-while: Similar ao while, mas garante que o bloco de código é executado pelo menos uma vez.
Arrays são conjuntos de variáveis do mesmo tipo. Para declarar e inicializar:
int numeros[5] = {1, 2, 3, 4, 5};
Strings em C são arrays de caracteres.
Obs: Na inicialização de strings, utiliza-se aspas duplas. Na atribuição de caracteres, utiliza-se aspas simples.
Utilizar a biblioteca #include <string.h>
Principais Funções:
- strlen(str): Retorna o comprimento de uma string.
- strcpy(string_destino, string_origem): Copia uma string para outra.
- strcmp(string1, string2): Compara duas strings e retorna: 0 se forem iguais, menor que 0 se a primeira string é menor que a segunda em ordem lexicográfica e maior que 0 caso contrário.
- strcat(string_destino, string_origem): Concatena duas strings.
- fgets(string, tamanho, stdin): Lê até n caracteres do fluxo de entrada especificado e armazena-os em uma string.
- a função fgets lê o caractere de nova linha '\n', geralmente é necessário substituí-lo por um caractere nulo
string[strlen(string)-1] = '\0';
- scanf x gets x fgets: o scanf("%s", string) lê até o primeiro espaço, o gets(str) lê até digitar enter e o fgets lê até que o usuário pressione Enter e considera o caractere nulo como um caractere válido.
- a função fgets lê o caractere de nova linha '\n', geralmente é necessário substituí-lo por um caractere nulo
- fputs(string, stdout): Escreve no fluxo de arquivo a string.
- getchar(): usada para ler um único caractere do teclado do usuário.
Structs permitem agrupar diferentes tipos de variáveis sob um mesmo nome. Exemplo:
struct Pessoa {
char nome[50];
int idade;
};
Declarar Funções: tipo_retorno nome_funcao(tipo_parametro1 param1, tipo_parametro2 param2) { /* corpo */ }
Parâmetros: Podem ser passados por valor ou referência.
- Passagem por Valor: Nesse método, o valor da variável é copiado para o parâmetro da função. Alterações no parâmetro não afetam a variável original fora da função. Exemplo:
void funcao_por_valor(int x) {
x = x + 1;
}
int main() {
int numero = 5;
funcao_por_valor(numero);
// 'numero' continua sendo 5, pois a função recebeu uma cópia de 'numero'
}
- Passagem por Referência: Nesse método, em vez de passar o valor real, você passa o endereço de memória da variável. Assim, a função pode modificar o conteúdo da variável original. Exemplo:
void funcao_por_referencia(int *x) {
*x = *x + 1;
}
int main() {
int numero = 5;
funcao_por_referencia(&numero);
// 'numero' agora é 6, pois a função modificou diretamente a variável original
}
- Ponteiros como Parâmetros: Em C, para realizar a passagem por referência, geralmente se usam ponteiros. Os ponteiros armazenam endereços de memória, permitindo que a função acesse e modifique o conteúdo diretamente.
São uma coleção de bytes armazenados em um dispositivo. Operações com arquivos em C envolvem:
- Abertura (fopen): Abre um arquivo para leitura ou escrita.
FILE *fopen(char *nome_arquivo, char *modo);
. Retorna NULL quando erro ou ponteiro para o tipo FILE quando sucesso. - Fechamento (fclose): Encerra o acesso a um arquivo.
int fclose(FILE *ponteiro_arquivo);
Retorna 0 quando sucesso. - Leitura/ Escrita de Caracteres:
- fgetc(FILE *fp):
int fgetc(FILE *ponteiro_arquivo);
- fputc(FILE *fp):
int fputc(int caractere, FILE *ponteiro_arquivo);
- Leitura/ Escrita de String:
- fgets(string, tamanho, arquivo)
- fputs(string, arquivo)
- Leitura/ Escrita de blocos de dados
- fread():
fread(string, sizeof(char), strlen(string), FILE *ponteiro_arquivo);
- fwrite():
fwrite(string, sizeof(char), strlen(string), FILE *ponteiro_arquivo);
- Leitura/ Escrita por fluxo padrão:
- fscanf():
fscanf(arquivo, "%d", &valor);
- fprintf():
fprintf(arquivo, "%d", variavel);
- Mover pelo arquivo:
fseek(FILE *ponteiro_arquivo, long int deslocamento, int origem);
- Deletar arquivo:
int remove(char *nome_arquivo)
FILE *arquivo = fopen("exemplo.txt", modo);
- "r" (read)
- "w" (write)
- "a" (append): Abre o arquivo para escrita no final.
- "rb", "wb", "ab" (modo binário): Modos de abertura binária, usados para arquivos binários
// Opção 1 - O nome do arquivo deve ser solicitado pelo programa
char arq[100];
fgets(arq, 100, stdin); // solicitar o arquivo
arq[strlen(arq) - 1] = '\0'; // altera o \n para \0
// Opção 2 - O nome do arquivo deve ser passado para o programa como PARÂMETRO de entrada
// Passar passar um arquivo como parâmetro para o programa, é necessário passar 2 paramêtros para a função:
// argc: número de argumentos passados para o programa na linha de comando
// argv: um array de strings que contém os argumentos passados para o programa
int main(int argc, char *argv[]) {
if (argc != 2) {
printf("Digite o nome do arquivo em txt\n");
system("pause");
exit(1);
}
}
FILE *arquivo; // manipulador do arquivo
arquivo = fopen(arq, "rb"); // abertura do arquivo binário para leitura
if(arquivo == NULL) {
printf("Erro na abertura do arquivo\n");
system("pause");
exit(1);
}
fclose(arquivo);