1 / 10

Utilização de ficheiros externos

programa. dados. 11101001001000100 10000100100010010 11111100000100100 10001001000001111. stream. 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

jeneva
Download Presentation

Utilização de ficheiros externos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. programa dados 11101001001000100 10000100100010010 11111100000100100 10001001000001111 stream 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. Utilização de ficheiros externos Streams por defeito no C++: • cout : ecrã • cin : teclado • cerr : ecrã, mesmo se a saída tiver sido redireccionada Tipos: • ifstream : leitura • ofstream : escrita • fstream : escrita ou leitura Abertura para leitura e escrita: • Em C++: fstream InOut(“RW.dat”, fstream::in | fstream::out ); • Em C:InOut=fopen(“RW.dat”, “r+”);

  3. Utilização de ficheiros externos Versão C: 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), • stdout (ecrã), • stderr (ecrã se a saída tiver sido redireccionada para ficheiro) printf  fprintf(stdout, …); scanf  fscanf(stdin, …);

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

  5. Utilização de ficheiros externos Comparação C++/C:

  6. Funções (versão C/C++) Passagem de variáveis entre funções: Valor 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 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. Funções (versão C/C++) Exemplo de passagem por valor: Passagem por referência:

  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. 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. 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

More Related