abre novamente e le */p = fopen(str,"r");fgets(resposta, 79, p);printf("\n\n%s\n", resposta);fclose(p); /* Fecha o arquivo */remove(str); /* Apaga o arquivo */84return(0);}Fluxos PadraoOs fluxos padrao em arquivos permitem ao programador ler e escrever em arquivos damaneira padrao com a qual o ja liamos e escreviamos na tela.fprintfA funcao fprintf() funciona como a funcao printf(). A diferenca e que a saida defprintf() e um arquivo e nao a tela do computador. Prototipo:int fprintf (FILE *fp,char *str,...);Como ja poderiamos esperar, a unica diferenca do prototipo de fprintf() para o deprintf() e a especificacao do arquivo destino atraves do ponteiro de arquivo.fscanfA funcao fscanf() funciona como a funcao scanf(). A diferenca e que fscanf() le de umarquivo e nao do teclado do computador. Prototipo:int fscanf (FILE *fp,char *str,...);Como ja poderiamos esperar, a unica diferenca do prototipo de fscanf() para o descanf() e a especificacao do arquivo destino atraves do ponteiro de arquivo.Talvez a forma mais simples de escrever o programa da pagina 79 e 80 se usandofprintf () e fscanf(). Fica assim:#include <stdio.h>#include <stdlib.h>int main(){FILE *p;char str[80],c;/* Le um nome para o arquivo a ser aberto: */printf("\n\n Entre com um nome para o arquivo:\n");gets(str);if (!(p = fopen(str,"w"))) /* Caso ocorra algum erro na abertura do arquivo..*/{ /* o programa aborta automaticamente */printf("Erro! Impossivel abrir o arquivo!\n");exit(1);}/* Se nao houve erro, imprime no arquivo, fecha ...*/fprintf(p,"Este e um arquivo chamado:\n%s\n", str);fclose(p);/* abre novamente para a leitura */p = fopen(str,"r");while (!feof(p)){fscanf(p,"%c",&c);printf("%c",c);85}fclose(p);return(0);}AUTO AVALIACAOVeja como voce esta. Escreva um programa que leia uma lista de nomes e idades de umarquivo texto. Prepare um arquivo para ser lido com nomes e idades. Apresente os dados lidosem forma de tabela na tela. Use as funcoes de sua preferencia, mas faca pelo menos duasversoes do programa usando funcoes de leitura diferentes.86Capitulo . 9 (Tipos de Dados Avancados)Modificadores de AcessoEstes modificadores, como o proprio nome indica, mudam a maneira com a qual avariavel e acessada e modificada.constO modificador const faz com que a variavel nao possa ser modificada no programa.Como o nome ja sugere e util para se declarar constantes. Poderiamos ter, por exemplo:const float PI=3.141;Podemos ver pelo exemplo que as variaveis com o modificador const podem serinicializadas. Mas PI nao poderia ser alterado em qualquer outra parte do programa. Se oprogramador tentar modificar PI o compilador gerara um erro de compilacao.O uso mais importante de const nao e declarar variaveis constantes no programa. Seuuso mais comum e evitar que um parametro de uma funcao seja alterado pela funcao. Isto emuito util no caso de um ponteiro, pois o conteudo de um ponteiro pode ser alterado por umafuncao. Para tanto, basta declarar o parametro como const. Veja o exemplo:#include <stdio.h>int sqr (const int *num);main (void){int a=10;int b;b=sqr (&a);}int sqr (const int *num){return ((*num)*(*num));}No exemplo, num esta protegido contra alteracoes. Isto quer dizer que, se tentassemosfazer*num=10;dentro da funcao sqr() o compilador daria uma mensagem de erro.volatileO modificador volatile diz ao compilador que a variavel em questao pode ser alteradasem que este seja avisado. Isto evita "bugs" serissimos. Digamos que, por exemplo, tenhamosuma variavel que o BIOS do computador altera de minuto em minuto (um relogio porexemplo).