Archivos, clase 5 Entrada formateada • scanf(“%formato %formato ...”,pointer1, pointer2, ...) • Lee del teclado entradas separadas por espacios. Convierte lo tecleado en valor dependiendo del formato y graba el resultado en la memoria donde apunta el pointer. • Los formatos son iguales a los de prontf %d - integer, %f - float, %s - string, %c - char Ejemplo #include <stdio.h> int main(void) { int a,b; do { scanf("%d %d", &a, &b); printf("%3d %3d\n",a,b); } while (a > 0); } #include <stdio.h> int main(void) { int a,b; char c; char line[100]; while (gets(line)) { sscanf(line,"%d %d", &a, &b); printf("%3d %3d\n",a,b); } } Archivos • Los archivos están escritos en algún lugar (disco, memory stick, ...) • La interacción entre en programa y los datos se realiza por el sistema operativo. • Sintaxis FILE *nombre • La conexión entre el pointer y los datos se realiza con la función fopen. sintaxis: fopen(nombre, tipo_de_acceso) ejemplo: FILE *f = fopen(“blabla.dat”, “r”); tipo_de_acceso: “r”-leer, “w”- escribir, “a”-agregar Ejemplo: copiar un archivo en otro. • #include <stdio.h> • int main(int argc, char *argv[]) { char line[100]; FILE *f = fopen(argv[1],”r”); FILE *g = fopen(argv[2],”w”); while (fgets(line,100,f)) { fputs(line,g); } fclose(g); fclose(f); } int main(int argc, char * argv[]) { int i; printf(“%d\n”,argc); for (i=0; i<argc; i++) printf(“%s\n”,argv[i]); } Otro ejemplo #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *f = fopen(“random.dat”,”w”); int i; for (i =0; i< 10; i++) fprintf(f,"%d\n",rand()); fclose(f); } #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *f = fopen(“random.dat”,”r”); int i,n; char line[100]; n=0; while(fgets(line,100,f)) n++; /* cuenta las lineas en el archivo */ fclose(f); f = fopen(“random.dat”,”r”); int *x = calloc(n,sizeof(int)); for (i =0; i<n; i++) { fscanf(f,"%d",&x[i]); printf(“%d\n”,x[i]); } fclose(f); } Visualizar resultados, gnuplot #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *f = fopen("v2.dat","w"); int i; double base; base = 2.0; for (i=0; i<30; i++) base *= 2.0; printf("%f\n", base); for (i =0; i< 100; i++) fprintf(f,"%20.10f %20.10f\n",random()/base,random()/base); fclose(f); } gnuplot • gnuplot • > plot ‘nombre de archivo’ • > plot ‘nombre’ u 1:2, ‘nombre1’ u 3:6 w l