Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquivo de Entrada e Saida 1 🌑 Arquivo de Entrada e Saida Definição Entrada e Saida Em quase todos os sistemas toda entrada e saida é realizada por meio de streams (fluxos de bytes) em que recebem e enviam dados para arquivos Normalmente a nossa entrada é o Teclado e a saida o console na programação em C Outras entradas e saidas podem ser: Um dispositivo ou um arquivo em disco Arquivo Para a linguagem C tudo é um arquivo Existe 3 arquivos que um programa abre automaticamente Stdin Arquivo de dados da entrada padrão, normalmente é o teclado stdout Arquivo de dados de saída padrão, normalmente é o console stderr arquivo de dados da saída padrão para erros, normalmente é o console Existe dois tipos de arquivos Arquivo de texto: os caracteres podem ser exibidos na tela e pode ser editado através de um editor de texto simples Arquivos Binários o conteúdo é uma sequência de bits que não podem ser lidos diretamente Declarando um arquivo de texto Inicio Se usa um tipo apontador para arquivo para declarar e manipular #include <stdi.h>int main() { FILE * nomePonteiro; return 0; } Arquivo de Entrada e Saida 2 Manipulando um arquivo de texto Funções fprintf Variação do printf Tem que passar um parâmetro que é qual o arquivo de saida para imprimir Formato fprintf(arquivo, "algo"); fscanf variação do scanf ela le a entrada de um arquivo que precisa ser passado como parâmetro Formato fscanf(arquivo, "%[^/n]", &nome) fopen Abre o arquivo passando o endereço e o modo Na passagem do endereço se você só colocar o nome do arquivo ele vai pegar o que está na mesma pasta que seu programa em c. Retorna um ponteiro para o arquivo sistema (tipo file para ser possivel trabalhar com o arquivo) Os modos são r abre para leitura r + abre para leitura e escrita - o arquivo já tem que existir w cria para escrita w+ cria para escrita e leitura a abre para escrita no final a+ abre para escrita no final com leitura Formato: FILE * fopen(char endereco[], char modo[]); fflush Esvazia o buffer do arquivo passado como parâmetro Todos os dados mantidos no buffer são escritos no arquivo Arquivo de Entrada e Saida 3 Quando se usa fprintf, ao invez de escrever no arquivo ele escreve na memoria, quando a memoria enche o programa c pega e grava tudo no arquivo. Usando-se o fflush não precisa esperar isso. Quando se usa o stdin, ela apenas esvazia Formato int fflush (FILE * arquivo) fclose Fecha o arquivo passado como parâmetro Executa automaticamente fflush Sempre que terminar de usar o arquivo no programa precisa fechar ele Formato: int fclose(FILE * arquivo) freopen Abre outro arquivo na stream passada pelo argumento arq, fechando o arquivo anteriormente aberto. Formato: FILE *freopen(char endereco[], char modo[], FILE * arq) feof Verifica se o cursor do arquivo já chego no fim ou não SIM diferente de zero NÃO zero Formato: int feof(FILE * arq) Exemplo #include <stdio.h>#include <stdlib.h> //constantes #define ENTRADA "entrada.txt"#define SAIDA "saida.txt" int main() { Arquivo de Entrada e Saida 4 FILE * entrada = fopen(ENTRADA, "r"); if (entrada == NULL) //isso vai acontecer se o arquivo não existir ou se já estiver ab erto { printf("Nao foi possivel abrir o arquivo '%s'\n", ENTRADA); return 1; } FILE * saida = fopen(SAIDA, "w"); if (saida == NULL) //isso acontece quando não tiver espaço { printf("Nao foi possivel abrir o arquivo '%s'\n", SAIDA); return 1; } float soma = 0; int lidos = 0; printf("Lendo dados do arquivo '%s'...\n", ENTRADA); while( ! feof(entrada) ) //até terminar o arquivo { float valor; if ( fscanf(entrada, "%f", &valor) == 1 ) //é interessante por isso para testar os valores que ele leu { lidos++; soma = soma + valor; printf("[%d]: %f\n", lidos, valor); } } if (lidos > 0) { fprintf(saida, "Lidos: %d valores.\n", lidos); //escrevendo no arquivo de saída fprintf(saida, "Soma: %f\n", soma); //escrevendo no arquivo de saída fprintf(saida, "Media: %f\n", soma / lidos); //escrevendo no arquivo de saída printf("Foram lidos %d valores do arquivo '%s'.\n", lidos, ENTRADA); printf("Arquivo '%s' gerado com sucesso.\n", SAIDA); } else { printf("Nenhum dado foi lido no arquivo '%s'. Arquivo deve estar vazio.", ENTRADA); } //fechando arquivos fclose(entrada); fclose(saida); }
Compartilhar