Escolar Documentos
Profissional Documentos
Cultura Documentos
com/reference/clibrary/
1. Funes de entrada/sada em C
Paraafunodeentradascanfedesadaprintfosseguintecdigossonecessrios paraformataraentradasada.
Cdigo Tipo d o x ld u lu c s f e lf le int int int long unsigned char char pointer float float double double
Descrio Decimal (base 10) Nmero octal (base 8) Nmero hexadecimal Nmero decimal longo Nmero decimal no sinalizado Caractere nico String de caracteres/frase Nmero real (o separador de casas decimais o ponto) Nmero real (o separador de casas decimais o ponto), notao cientfica Nmero real longo (o separador de casas decimais o ponto), preciso entendida Nmero rela longo (o separador de casas decimais o ponto), notao cientfica
Obs:oscanf("%c",&letra),funcionademaneiraanlogaaocin.get(),istoslumcaractere apsoenter.Paralersomenteumcaracteredoteclauseogetch().
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
2
printf("\nEntre com o numero:"); scanf ("%f",&a); fflush(stdin); printf("\nO numero %.2f em notacao cientifica eh %.0e \t", a, a); printf("\n Digite s para sair"); letra = getch(); }while( letra != 's'); }
1.4 Exerccio: com base no programa feito em C++ para o fluxograma abaixo altereo para que execute em C apenas.
Get(n) Inteiro numero = 0, Caractere tecla = t
get(tecla)
sim
(0 tecla 9) ? sim no
numero = numero / 10
sim
(tecla == 08)?
no
(tecla != s)?
no
Fim get
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
2 Strings
Stringumvetordecaracteresqueterminacomcaracterenulo'\0',noumtiposuportado pelalinguagemC. 2.1
Exemplo de string
#include <stdio.h> #include <stdlib.h> #include <conio.h> void main() { char frase[7] = char frase1[] = char frase2[] = printf ("%s\n", printf ("%s\n", printf ("%s\n", getch(); }
"string"; //neste caso o compilador insere o '\0' "string com numero de elemento autodefinida"; {'s','t','r','i','n','g','\0'};//neste caso necessrio o '\0' frase); frase1); frase2);
2.2
Leitura/impresso de string
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
4 2.3
#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char frase1[256], frase2[256]; printf ("Entre com a frase 1\n"); gets(frase1); printf ("Entre com a frase 2\n"); gets(frase2); //a comparao feita caractere a caractere, observando o cdigo ASCII na operao, //portanto, sendo o ASCII de uma posio maior que a outra, strcmp retornar valor > 0 if (strcmp(frase1,frase2) == 0) puts ("A frase 1 IGUAL a Frase 2"); else if (strcmp(frase1,frase2) > 0) puts ("A frase 1 eh MAIOR que a Frase 2"); else puts ("A frase 1 eh MENOR que a Frase 2"); }
2.4
#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char i, frase1[256], frase2[128]; printf ("Entre com a frase 1: "); gets(frase1); printf ("\nEntre com a frase 2: "); gets(frase2); puts ("\nO valor de cada caractere de frase1 em hexa eh:"); //strlen no conta o '\0' no tamanho da string for (i = 0; i < strlen(frase1)+1; i++) printf("%x ",frase1[i]); printf("\n"); puts ("\nO valor de cada caractere de frase2 em hexa eh:"); for (i = 0; i < strlen(frase2)+1 ; i++) //strlen no conta o '\0' printf("%x ",frase2[i]); printf("\n"); strcat(frase1,frase2); puts ("\nA frase concatenada eh:"); puts (frase1); puts ("\nO valor de cada caractere de frase concatenada em hexa eh:"); for (i = 0; i < strlen(frase1)+1 ; i++) //strlen no conta o '\0' printf("%x ",frase1[i]); printf("\n"); }
2.5
#include <stdio.h> #include <stdlib.h> #include <string.h> void main() { char i, frase1[256], frase2[128]; printf ("Entre com a frase 1: "); gets(frase1); printf ("\nEntre com a frase 2: "); gets(frase2);
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
puts ("\nO valor de cada caractere de frase1 em hexa eh:"); for (i = 0; i < strlen(frase1)+1; i++)//strlen no conta o \0 printf("%x ",frase1[i]); printf("\n"); puts ("\nO endereco de cada caractere de frase1 em hexa eh:"); for (i = 0; i < strlen(frase1)+1; i++)//strlen no conta o \0 printf("%u ",&frase1[i]); printf("\n"); puts ("\nO valor de cada caractere de frase2 em hexa eh:"); for (i = 0; i < strlen(frase2)+1 ; i++) //strlen no conta o \0 printf("%x ",frase2[i]); printf("\n"); printf ("\no endereco da concatenacao eh: %u\n", &frase1[strlen(frase1)]); //strcpy substitui o primeiro string pelo segundo strcpy(&frase1[strlen(frase1)],frase2); //implementao do strcat, usando strcpy puts ("\nA frase concatenada eh:"); puts (frase1); puts ("\nO valor de cada caractere de frase concatenada em hexa eh:"); for (i = 0; i < strlen(frase1)+1 ; i++) //strlen no conta o \0 printf("%x ",frase1[i]); printf("\n"); }
2.6 Exerccio Escreva um programa em C que coloque em ordem crescente de tamanho uma matriz com 10 linhas e suas colunas de strings de no mximo 32 caracteres.
#include #include #include #include <stdio.h> <stdlib.h> <string.h> <conio.h>
#define linhas 10 void main() { char i,j, auxmatriz[32], matriz[linhas][32]; for (i=0;i<linhas;i++) { printf("\nEntre com a frase [%d]:",i+1); gets (&matriz[i][0]); } for(j=linhas -1;j>0;j--) { for (i=0;i<j;i++) { //o & representa o endereo da varivel if(strlen(&matriz[i][0]) > strlen(&matriz[i+1][0])) { strcpy(&auxmatriz[0],&matriz[i][0]); strcpy(&matriz[i][0],&matriz[i+1][0]); strcpy(&matriz[i+1][0],&auxmatriz[0]); } } } for (i=0;i<linhas;i++) { printf("\nA matriz ordenada eh:%s",&matriz[i][0]); } getch(); }
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
6 2.7
void main() { char stringNumero[] = "12345"; int numero; numero = atoi(stringNumero); numero*=10; printf("\nO numero multiplicado por 10 eh: %u",numero); getch(); }
void main() { char stringNumero[] = "3.1415926535"; float numero; numero = atof(stringNumero); numero*=10; printf("\nO numero multiplicado por 10 eh: %f",numero); getch(); }
void main() { char stringNumero[10]; int numero; printf("digite o valor:"); scanf("%d",&numero); //converte o valor de nmero em string, neste caso, base 2 (binrio) itoa(numero,stringNumero,2); printf("\nO numero %d em binrio eh: %s",numero,stringNumero); getch(); }
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
7
i=0; do { //o incremento do i feito aps a atribuio frase[i++] = toupper (frase[i]); //toupper coloca todos os caracteres em maiuscula }while(frase[i]!= '\0'); printf("\nA frase em letras maiusculas eh: %s",frase); getch(); }
3 Ponteiros
At agora fazamos referncia as posies/clulas da memria atravs do nome da mesma. Assimnotivemosquenospreocuparcomalocalizaofsicadosdadosnamemria.Porm, osdadosnamemriadeumcomputadorsocomoumvetor(array)debytes,assimpossvel localizar facilmente uma posio do vetor ou celular de memria, pois cada byte tem um endereonico. 3.1 Exemplo com variveis e endereos charx=10,y; char*z; y=x;//yrecebeocontedodex=10 z=&x;//zrecebeoendereodex=3045 Nomedavarivel Contedodamemria 3043 Endereodememria 10 Contedodamemria y Nomedavarivel 3.2
x 10
3045
3047
3045 z
#include <stdio.h> #include <stdlib.h> void main() { char s[100]; char *ps; printf ("\nDigite uma frase\n"); gets(s); ps = s; while (*ps != '\0') ps++; ps--; printf ("\nImprimindo caractere a caractere de tras para frente\n"); while (ps >= s) { putchar(*ps); ps--; } printf ("\nPS aponta para:%s\n",ps); }
3.3
Exerccio
1. EscrevaumprogramaemCqueusandoponteiroimplementeafunoequivalenteao strlen.
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
8 2. EscrevaumprogramaemCqueusandoponteirosimplementeafunaoequivalente aostrcpy.
4 Funes
So blocos de programa destinadas a um mesmo fim que permitem subdividir as funcionalidades de cada segmento do programa em C. A esta tarefa de separao das funcionalidades de um programa chamamos modularizao separao do problema em subproblemas(mdulo). 4.1 Formato geral de uma funo tiporetornadopelafunonomedafuno(listadeparmetros) { //corpodafuno:comandos,funesdebiblioteca,estruturasdecontrole,... } 4.2
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
9 4.2.2 Argumentos de uma funo Osargumentossoosparmetrospassadosparaumafuno.Achamadadafunopode passarparmetrosporvaloroureferncia. 4.2.2.1 chamada de funo por valor
#include <stdio.h> #include <conio.h> int pow2 (int x); void main() { int numero, numeroQuad; printf("Entre com o valor a ser quadrado:"); scanf("%d", &numero); numeroQuad = pow2 (numero); // passada varivel como parmetro printf("\n o quadrado numero %d eh %d",numero, numeroQuad); getch(); } int pow2 (int x) { return (x*x); }
x, &numero1 y, &numero2
4.2.3 Funes que retornam valor Seosparmetrosdafunosopassadosporvaloreprocessamentodafunoproduzvalores que precisam ser repassados ao chamador, isto feito retornando o resultado do processamentoatravsdacodificaodoreturn.Hnecessidadedeterocuidadoqueotipo retornadopelafunosejacompatvelcomodadoretornadoemreturn. H funes que no retornam nenhum valor, neste caso no deve ser codificado o returneotiporetornadopelafunodeveservoid. 4.2.4 Exerccio 1. EscrevaumprogramaemCqueleiadoisnmeroseusandofunodescubraqualo maior. 2. EscrevaumprogramaemCqueleiaumnmeroeusandofunodescubraqualeste epositivoounegativo.
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
10 3. Escreva um programa em C que leia um nmero do tipo byte e usando funo descubraseprimoouno. 4. Escreva um programa em C que usando funo descubra todos os nmeros primos entre0e300. 5. EscrevaumprogramaemCqueleiadoisnmeroscomostring,umnumerorealeum inteiro,convertaoparavaloresnumricoseosmultipliqueusandoumafuno. 6. Escreva um programa em C que leia a altura e a massa (peso) de um individuo e usandoumafunocalculeseindicedeMassaCorporal(IMC).OIMCcalculadoda seguintemaneira:IMC= massa/altura2.Depois,combasena tabelaabaixoeusando outrafunooprogramadedeveinformaraclassificaodosujeito.
IMC <18,5 Classificao Magreza
18,524,9 Saudvel 25,029,9 Sobrepeso 30,034,9 ObesidadeGrauI 35,039,9 ObesidadeGrauII(severa) 40,0 ObesidadeGrauIII(morbida)
7. EscrevaumprogramaemCqueusandoumafunocomumsparmetrocalculea mdiaaritmticadequantosvaloresousuriodesejar. 8. EscrevaumprogramaemCqueusandoumafunocomumsparmetroarmazeneo valormximoeomnimodequalquerquantidadedevaloresfornecidospelousurio. Afunodevedevolveromximoseonmerofornecidoestmaisprximodomaior ou o mnimo se o valor fornecido estiver mais prximo do menor. Ao fim do processamentodevemserimpressososvaloresmximoemnimo. 9. Escreva um programa em C que usando uma funo com dois parmetros passados por referncia armazene o valor mximo e o mnimo de qualquer quantidade de valores fornecidos pelo usurio. Ao fim do processamento devem ser impressos os valoresmximoemnimo. 4.3
#include <stdio.h> void inicializaVet( int vet[5]); void main(void) { int x[5],i; inicializaVet(x); for ( i=0; i<5; i++) printf("\nvet[%d] = %d",i+1,x[i]); } void inicializaVet( int vet[5]) { int i; for ( i=0; i<5; i++) { printf("\nEntre com a posicao %d do vetor:",i+1); scanf("%d",&vet[i]); } }
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
11
operando com vetores atravs de funes (passagem de parmetros por referncia)
#include <stdio.h> int maximo( int vet[5] ); void main(void) { int x[] = {1,3,4,18,12}; printf("o Valor mximo %d", maximo(x)); } int maximo(int vet[5])//passagem de parmetro por referncia { int max=vet[0]; for (int i=1; i<5; i++) if (vet[i]>max) max = vet[i]; return max; }
1. Escreva um programa em C que usando uma funo com dois parmetro passados por referncia (explicita) e um por referncia (implcita), ordene a cada iterao 2 valores "retornados"porumafunoqueaplicaummtodoadaptadodoalgoritmobolha.Aofim doprocessamentodeveserimpressoovetorordenadoemordemcrescente.Observeque onmerodetrocasdecrescesignificativamentenestecaso.
#include<stdio.h> #include<conio.h> #define MaxElementos 10 void ordenaminvet(int vet1[MaxElementos],int ic,int jc,int *Rmin); void ordenamaxvet(int vet1[MaxElementos],int ic,int jc, int *Rmax); void main(void) { int j=MaxElementos-1,Rmax=0,Rmin=0,aux,vet[MaxElementos]={12,32,55,66,44,34,87,87,13,5}; for(int i=0;i<j;i++,j--) { ordenaminvet(vet,i,j,&Rmin); aux=vet[i]; vet[i]=vet[Rmin]; vet[Rmin]=aux; ordenamaxvet(vet,i,j,&Rmax); aux=vet[j]; vet[j]=vet[Rmax]; vet[Rmax]=aux; } printf("\n o vetor ordenado decrescentemente eh: "); for(int i=0;i<MaxElementos;i++) { printf("\n vet[%d]=%d",i+1,vet[i]); } getch(); } void ordenaminvet(int vet1[MaxElementos],int ic,int jc,int *Rmin) { int imin=ic; for(int i=ic;i<=jc;i++) { if(vet1[i]<vet1[imin]) imin=i; } *Rmin=imin; } void ordenamaxvet(int vet1[MaxElementos],int ic,int jc, int *Rmax) { int imax=ic; for(int i=ic;i<=jc;i++) {
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
12
if(vet1[i]>vet1[imax]) imax=i; } *Rmax=imax; }
4.4
#include <stdio.h> void inicializaMat( int mat[2][2]); void main(void) { int x[2][2],i,j; inicializaMat(x); for ( i=0; i<2; i++) for ( j=0; j<2;j++) printf("\nmat[%d][%d] = %d",i+1,j+1,x[i][j]); } void inicializaMat( int mat[2][2]) { int i,j; for ( i=0; i<2; i++) for ( j=0; j<2;j++) { printf("\nEntre com a posicao mat[%d][%d] = ",i+1,j+1); scanf("%d",&mat[i][j]); } }
#include <stdio.h> void multiplicamat( int mat1[2][2], int mat2[2][2], int mat3[2][2]); void main(void) { int x1[2][2] = {{1,2},{1,2}}, x2[2][2] = {{1,2},{1,2}}, x3[2][2] = {{0,0},{0,0}}; multiplicamat(x1,x2,x3); //passagem de parmetro por referncia printf("\nResultado da multiplicao:"); for (int i=0; i<2; i++) for (int j=0; j<2;j++) printf("\nmat[%d][%d] = %d",i+1,j+1,x3[i][j]); } void multiplicamat( int mat1[2][2],int mat2[2][2], int mat3[2][2]) { for (int i=0; i<2; i++) for (int j=0; j<2;j++) for (int k=0; k<2; k++) mat3[i][j] = mat3[i][j] + mat1[i][k] * mat2[k][j]; }
5 Estruturas
Uma estrutura um conjunto heterogeneo de dados agrupados sob o mesmo nome. Uma estrutura difere de um vetor, por exemplo, porque no vetor todos os dados agrupados so do mesmo tipo. Estruturas so declaradas em C da seguinte forma: struct nome_da_estrutura { tipo campo1; tipo campo2;
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
13
tipo campo3; };
Na prtica numa estrutura se usa tipos conhecidos (entre os colchetes) para definir num novo tipo, a estrutura. 5.1
Exemplo
5.2
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
14
{ char str[] ="This is a simple string"; char * pch, busca[] = "simple"; pch = strstr (str,busca); if (pch != NULL) printf ("\nA substring %s foi encontrada na frase e comeca em:%s",busca, pch); else printf("\nA palavra %s nao encontrada",busca); }
5.3 Exerccios 1. EscrevaumprogramaemlinguagemCqueleiaonome,estadocivil,anodenascimento, msdenascimentode10indivduoseencontreomaisvelhoemaisnovodosmesmos. 2. EscrevaumprogramaemlinguagemCqueleiaonome,estadocivil,anodenascimento, msdenascimentodonmerodeindivduosqueousuriodesejareencontreomais velhoecasadoeomaisnovoesolteirodosmesmos. 3. EscrevaumprogramaemlinguagemCqueleiaasinfromaesdeumcadastrocomo nome,estadocivil,anodenascimento,msdenascimentodonmerodeindivduosqueo usuriodesejar.Oprogramadevepermitiraousuriofazerumabuscaporfaixaetriae pornome. 5.4
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Filme { char titulo[64]; int ano; }; void main () { Filme meu; Filme *pontFilme; //ponteiro para varivel do tipo Filme pontFilme = &meu; printf("\nEntre com titulo do meu filme: "); gets(pontFilme->titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&pontFilme->ano); fflush(stdin); printf("\nMEU filme favorito : %s do ano de %d", (*pontFilme).titulo, (*pontFilme).ano); }
5.5
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Filme { char titulo[64]; int ano; }; void incializaEstruct(Filme * pont); void main () { Filme meu; Filme *pontFilme; //ponteiro para varivel do tipo Filme pontFilme = &meu; incializaEstruct(pontFilme); printf("\nMEU filme favorito : %s do ano de %d", (*pontFilme).titulo, (*pontFilme).ano);
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
15
} void incializaEstruct(Filme * pont) { printf("\nEntre com titulo do meu filme: "); gets(pont->titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&pont->ano); fflush(stdin); }
5.6
Aninhamento de estruturas
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Filme { char titulo[64]; int ano; }; struct Amigo { char nome[32]; int idade; Filme favorito; }; void main () { Amigo joao; Amigo *pontAmigo; //ponteiro para varivel do tipo Amigo pontAmigo = &joao; printf("\nEntre com o nome de seu amigo: "); gets(joao.nome); printf("\nEntre com a idade de seu amigo: "); scanf("%d",&joao.idade); fflush(stdin); printf("\nEntre com titulo do filme favorito de seu amigo: "); gets(joao.favorito.titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&pontAmigo->favorito.ano); fflush(stdin); printf("\nO filme favorito de %s eh: %s do ano de %d", joao.nome, pontAmigo->favorito.titulo, joao.favorito.ano); }
5.7 Exerccio 1. EscrevaumprogramaemlinguagemCqueleiaasinformaescadastraisde5individuos. Cada individuo tem como atributos nome e idade, e informaes sobre veiculos automotoreseimveis.Osveiculosautomotorestemcomoatributosoano,valoretipo (automovel,moto,utilitrio,...)eosimveistemcomoatributootipo(casa,apartamento, terreno) e o valor. O programa deve permitir a entrada de parmetros de busca que relacionem o individuo, veiculos e imoveis independemente ou integradamente. Obrigatoriamentedevemserutilizados:multiplasestruturas,funeseponteiros.
6 Arquivos
Os dispositivos de entrada/sada trabalham com fluxo (stream) de dados, operados em C como arquivos. Os arquivos podem ser de texto ou binrio. Os arquivos texto contem uma sequenciadecaracteres(ASCII,porexemplo),geralmenteorganizadosemlinhas(contendoou noocaracteresdefimdelinha`\n=linefeed+carriagereturn).Osarquivosbinrioscom umasequenciadebytesgeralmentenolegvel(texto)epodemrepresentarofluxodedados que corresponde a uma imagem, arquivo executvel, etc. As operaes mais comuns num
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
Modo Descrio
r w a rb wb ab r+ w+ a+ r+b r+b a+b Abre um arquivo texto para leitura Cria um arquivo texto para escrita Anexa texto ao fim de um arquivo texto Abre um arquivo binrio para leitura Cria um arquivo binrio para escrita Anexa a um arquivo binrio Abre um arquivo texto para leitura/escrita Cria um arquivo texto para leitura/escrita Cria ou anexa a um arquivo texto para leitura/escrita Abre um arquivo binrio para leitura/escrita Cria um arquivo binrio para leitura/escrita Anexa a um arquivo binrio para leitura/escrita
6.2
Exemplo
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
17
do { c = fgetc(pontArq); putchar(c); } while (!feof(pontArq)); fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch (); exit (0); //cdigo de retorno indicando execuo bem sucedida } }
printf("\nEntre com o nome do arquivo para escrita/leitura:"); gets(nomeArq); printf("\nVoce deseja escrever (1) ou ler (2) o arquivo %s \n: ",nomeArq); if((o=getche())== '1') { if (( pontArq = fopen(nomeArq, "w")) == NULL) // Abre o arquivo para escrita { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nDigite o texto que ser inserido no arquivo\n"); printf("Digite \"CTRL\" + \'Z\' para FINALIZAR\n"); do { gets(c); strcat(c,"\n"); //insere fim de linha fputs(c, pontArq); } while (!feof(stdin)); fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch(); exit (0); //cdigo de retorno indicando execuo bem sucedida } else if(o == '2') { if (( pontArq = fopen(nomeArq, "r")) == NULL) // Abre o arquivo para leitura { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nConteudo do arquivo: %s\n",nomeArq); rewind(pontArq); //garante que a posio de leitura atual o comeo do arquivo do { fgets(c,64,pontArq); //l 64 caracteres de pontArq e armazena em c[64] puts(c); } while (!feof(pontArq)); fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch (); exit (0); //cdigo de retorno indicando execuo bem sucedida } }
struct Filme {
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br
18
char titulo[64]; int ano; }; int main (void ) { Filme meu; char o; FILE *pontArq; //ponteiro especial para arquivos char nomeArq[64]; printf("\nEntre com o nome do arquivo para escrita/leitura:"); gets(nomeArq); printf("\nVoce deseja escrever (1) ou ler (2) o arquivo binrio %s \n: ",nomeArq); if((o=getche())== '1') { if (( pontArq = fopen(nomeArq, "wb")) == NULL) // Abre o arquivo para escrita { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nEntre com titulo do meu filme: "); gets(meu.titulo); printf("\nEntre com o ano do meu filme: "); scanf("%d",&meu.ano); fflush(stdin); //sizeof determina o nmero de bytes da estrutura if (fwrite( &meu, sizeof (struct Filme), 1, pontArq) != 1) { puts("Erro na escrita."); exit(1); } fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\n pressione uma tecla para continuar\n"); getch(); exit (0); //cdigo de retorno indicando execuo bem sucedida } else if(o == '2') { if (( pontArq = fopen(nomeArq, "rb")) == NULL) // Abre o arquivo para leitura { printf("\n\nNao foi possivel abrir o arquivo.\n"); exit(1); //cdigo de retorno indicando operao com arquivo sem sucesso } printf("\nConteudo do arquivo: %s\n",nomeArq); rewind(pontArq); //garante que a posio de leitura atual o comeo do arquivo //sizeof determina o nmero de bytes da estrutura if (fread( &meu, sizeof (struct Filme), 1, pontArq) != 1) { puts("Erro na leitura."); exit(1); } fclose(pontArq);//fecha o arquivo, operao obrigatria printf("\nMEU filme favorito : %s do ano de %d", meu.titulo, meu.ano); printf("\n pressione uma tecla para continuar\n"); getch (); exit (0); //cdigo de retorno indicando execuo bem sucedida }
PUCPR/CursodeEngenhariaEletrnica/TcnicasdeProgramao Prof.AltairOlivoSantin.Email:altair.santin@pucpr.br