A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 programa dados Utilização de ficheiros externos A maneira mais simples de escrever para um ficheiro externo é redireccionar a saída de um programa: em.

Apresentações semelhantes


Apresentação em tema: "1 programa dados Utilização de ficheiros externos A maneira mais simples de escrever para um ficheiro externo é redireccionar a saída de um programa: em."— Transcrição da apresentação:

1 1 programa dados Utilização de ficheiros externos A maneira mais simples de escrever para um ficheiro externo é redireccionar a saída de um programa: em UNIX./exec > dados.dat Mas esta versão é muito limitada. Para aceder a um ficheiro externo num programa em C/C++ temos de definir um stream

2 2 Streams por defeito no C++: cout : ecrã cout : ecrã cin : teclado cin : teclado cerr : ecrã, mesmo se a saída tiver sido redireccionada cerr : ecrã, mesmo se a saída tiver sido redireccionadaTipos: ifstream : leitura ifstream : leitura ofstream : escrita ofstream : escrita fstream : escrita ou leitura fstream : escrita ou leitura Abertura para leitura e escrita: Em C++: fstream InOut(RW.dat, fstream::in | fstream::out ); Em C++: fstream InOut(RW.dat, fstream::in | fstream::out ); Em C: InOut=fopen(RW.dat, r+); Em C: InOut=fopen(RW.dat, r+); Utilização de ficheiros externos

3 3 Versão C: FILE *stream; FILE *stream; stream = fopen(ficheiro.dat, wt); (r para leitura) fprintf(stream, %d %f\n, i, x); (ou fscanf....) fclose(stream); Para I/O binário usa-se fread e fwrite. Streams standard: stdin (teclado), stdin (teclado), stdout (ecrã), stdout (ecrã), stderr (ecrã se a saída tiver sido redireccionada para ficheiro) stderr (ecrã se a saída tiver sido redireccionada para ficheiro) printf fprintf(stdout, …); scanf fscanf(stdin, …); Utilização de ficheiros externos

4 4 Versão C++: #include #include ifstream stream; ifstream para leitura stream.open(dados.dat); stream >> x >> y ; dados.close(stream); Pode simplificar-se: ifstream stream(dados.dat) Utilização de ficheiros externos

5 5 Comparação C++/C: Utilização de ficheiros externos #include #include using namespace std; int main(){ int i1, i2; ifstream dados("dados.dat"); if(dados.bad()){ cerr << "Impossivel ler o ficheiro" << endl; exit(1);} while( dados >> i1 >> i2, !dados.eof() ) cout << i1 << " " << i2 << endl; cout << i1 << " " << i2 << endl; return 0; } #include #include int main(){ int i1, i2; FILE *dados; if( !(dados = fopen("dados.dat", "rt") ) ){ fprintf(stderr, "Impossivel ler o ficheiro\n"); exit(1);} while( (fscanf(dados, "%d %d", &i1, &i2 )) != EOF ) printf("%d %d\n", i1, i2); printf("%d %d\n", i1, i2); return 0; }

6 6 Funções (versão C/C++) Passagem de variáveis entre funções: Valor Valor Referência Referência Nos dois casos o que é passado para o interior da função é uma cópia do valor da variável apresentada no argumento. Na passagem por valor é passado o valor contido na variável Na passagem por valor é passado o valor contido na variável Na passagem por referência é passada a localização em memória da variável Na passagem por referência é passada a localização em memória da variável A passagem por referência é a mais utilizada quando pretendemos passar objectos complexos para dentro das funções.

7 7 Funções (versão C/C++) Exemplo de passagem por valor: Passagem por referência:

8 8 Funções (versão C/C++) Ponteiros a gogo: char *sp = ola; char *s2 = bom dia; sp=&s2; printf(%s, sp); //bom dia Ponteiro especial para funções: void* double obj=3.14; double *pd = &obj; Void *pv = &obj; pv = pd; void* indica que o valor associado é um ponteiro mas que o tipo desse ponteiro é desconhecido. Pode ser usado para comparar com outro ponteiro ou passar ou retornar de uma função. Pode-se também atribuir a outro ponteiro do tipo void*. Não se pode operar sobre o objecto para o qual aponta!!!

9 9 Funções (versão C/C++) Ponteiros e referências; Int val=1024; Int *pi=&ival; Int &ri = ival; Referências referem-se sempre a um objecto; não é possível definir uma referência sem a inicializar; atribuição a uma referência altera o objecto a que a referência se refere, não o liga a outro objecto, Ponteiros podem-se definir per se; os ponteiros permitem que os objectos permaneçam inalterados mas a atribuição liga-o a outro objecto.

10 10 Funções (versão C/C++) Ponteiros a gogo: double dval; double *pd = &val; double *pd2=pd; int *pe = pd; //erro! Ponteiros de tipo diferente pi = &dval; // OK! int ival =1024, ival2 =2048; int *pi = &ival, *pi2=&ival2; pi=pi2; // pi aponta para ival2; valor de ival2 não modificado int &ri =ival, &ir2 = ival2; // ri e ri2 sao referencias a ival e ival2 ri = ri2; // atribui ival2 a ival; valor de ival modificado No último caso a atribuição altera ival, não o valor referenciado por ri, mas não a referência; as 2 referências referem-se na mesma aos objectos originais e agora o valor desses objectos é o mesmo


Carregar ppt "1 programa dados Utilização de ficheiros externos A maneira mais simples de escrever para um ficheiro externo é redireccionar a saída de um programa: em."

Apresentações semelhantes


Anúncios Google