ENTRADA / SALIDA ESTÁNDAR Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf • Salida estándar: pantalla printf (char * formato, …) • formato: es una cadena de caracteres que controla el formato de la información a imprimir. Consiste en: – – – – – especificadores de conversión banderas anchos de campo precisiones caracteres literales • … : argumentos variables en número y tipo Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Especificadores de formato • Enteros: – %d – %i – %u – %hd – %ld – %o – %X %x – %p entero decimal con signo entero decimal con signo entero decimal sin signo entero short entero long entero en octal sin signo entero en hexadecimal sin signo puntero Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Especificadores de formato • Ejemplos: printf (“%d \n%i \n%d \n%d\n”, 455, 455, +455, -455); 455 455 455 -455 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Especificadores de formato printf (“%hd \n%ld \n%u \n%u \n%o \n%x \n%X\n”, 32000,2000000000, 455, -455, 455, 455, 455); 32000 2000000000 455 65081 707 1c7 1C7 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Especificadores de formato • Reales (precisión de 6 decimales): – %f – %e %E – %g %G real real en notación exponencial real en formato ‘f’ o ‘e’ sin rellenar con ceros hasta los 6 decimales. El total de dígitos, por defecto es también 6 – %lf %le %lE %lg %lG para long double Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Especificadores de formato • Ejemplo: printf (%e \n%e \n%e \n%E \n%f \n%g \n%G\n”, 1234567.89, +1234567.89, -1234567.89, 1234567.89,1234567.89, 1234567.89, 1234567.89); 1.234568e+06 1.234568e+06 -1.234568e+06 1.234568E+06 1234567.890000 1.23457e+06 1.23457E+06 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Especificadores de formato • Cadenas de caracteres y caracteres: – %c – %s – %% carácter cadena de caracteres % • Ejemplo: printf (“%c \n %% %s”, ‘ñ’, “superior”); ñ % superior Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Anchos de campo y precisión • Ancho de campo: indica el número exacto de posiciones reservado para imprimir el dato • Cuando el ancho de campo es mayor que las posiciones necesarias para el dato, éste se justifica a la dcha • Forma: %ancho especificador Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Anchos de campo y precisión • Ejemplos: printf (“%4d \n%4d \n%4d \n%4d\n”, 1, 12,123, 1234); 1 12 123 1234 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Anchos de campo y precisión printf (“%4d \n%4d \n%4d \n%4d\n”, -1, -2, -123, -1234); -1 -12 -123 -1234 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Anchos de campo y precisión • Precisión: depende del tipo de datos a los que afecte: – Enteros: número mínimo de dígitos a imprimir. Se rellena con ceros a la izda hasta completar la precisión (por defecto es 1) – Reales: número de posiciones decimales que se imprimirán. Con %g y %G, es el máximo número de dígitos significativos a imprimir – Cadenas: número máximo de caracteres a imprimir • Forma: %.precisión especificador • Se puede combinar con el ancho de campo: %ancho.precisión especificador Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Anchos de campo y precisión • Ejemplos: printf (“%9.3f \n%.4d \n%.9d\n”, 123.456789, 873, 873); 123.457 0873 000000873 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Anchos de campo y precisión printf(“%.3f \n,%.3e \n%.3g\n”, 123.194536, 123.94536, 123.94536); 123.945 1.239e+02 124 printf(“%15s \n%.6s\n”, “hola”, “hola a todos”); hola hola a Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Anchos de campo y precisión • El ancho y la precisión se pueden especificar de forma variable “%*.* especific”, ancho, precisión, valor • Ejemplo: printf (“%*.*f”, 7, 2, 34.821); 34.82 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Banderas • - (signo menos): justificación a la izda dentro del ancho especificado • + : pone un signo + delante de valores positivos y un signo – delante de valores negativos • Espacio : imprime un espacio delante de un valor positivo que no lleve la bandera + • #: pone 0 delante de un valor en octal pone 0x ó 0X delante de un valor hexadecimal obliga a poner el punto decimal con los reales aunque no se impriman decimales con g o G, no se eliminan los ceros de la dcha * 0 (cero) : rellena un campo numérico con ceros por la izda Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Banderas • Ejemplos: printf (“%10s%10d%10c%10f\n”, “hola”, 7, ‘a’, 1.23); hola 7 a 1.230000 printf (“%-10s%-10d%-10c%-10f\n”, “hola”, 7, ‘a’, 1.23); hola 7 a 1.230000 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Banderas printf(“%+d \n%+d \n% d \n%+010d\n”,786, -786, 400, 452); +786 -786 400 +000000452 printf (“%#xs% d\n”,455, 455); 0x1c7 455 Lenguajes de programación LPSI EUI UPM SALIDA ESTÁNDAR - printf Literales y secuencias de escape • Los siguentes caracteres hay que imprimirlos como una secuencia de escape: \’ \” \? \\ \a (campana) \b (borrar hacia atrás) \f (avance de página) \n \r (mover el cursor al principio de la línea actual) \t (tabulador horizontal) \v (tabulador vertical) Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Entrada estándar: teclado scanf (char * formato, …) • formato: es una cadena de caracteres que controla el formato de la información a leer. Consiste en: – especificadores de conversión – anchos de campo – Caracteres de rastreo • …: argumentos variables en número y tipo Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Enteros: – %d entero decimal – %i entero decimal, octal o hexadecimal – %u entero sin signo – %o entero octal – %x %X entero hexadecimal –h precediendo a los anteriores, entero corto –l precediendo a los anteriores, entero largo Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Ejemplo: scanf(“%d%i%i%i%o%u%x”,&a, &b, &c, &d, &e, &f, &g); -70 -70 070 0x70 70 70 70 printf(“%d %d %d %d %d %d %d\n”, a, b, c, d, e, f, g); -70 70 56 112 56 70 112 Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Reales: – – – – %f %e %E %g %G Lol precediendo a los anteriores, para leer un double o un long double • Ejemplo: scanf(“%e%f%g”,&a, &b, &c); 1.27987 1.27987e+03 3.38476e-06 printf(“%f %f %f\n”, a, b, c); 1.279870 1279.869995 0.000003 Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Caracteres y Cadenas de caracteres: – %c – %s carácter cadena • Ejemplo: scanf(“%c%s”, &c, cad); Domingo printf(“%c %s\n”, a, cad); D omingo Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Para leer secuencias de caracteres • Forma: – %[caracteres] – %[^caracteres] se toman de la entrada caracteres incluidos en [ ]. Deja de buscar cuando encuentra un carácter que no está en el conjunto se toman de la entrada caracteres no incluidos en [ ]. Deja de buscar cuando encuentra un carácter que está en el conjunto Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Ejemplo: scanf(“%[aeiou]”, cad); aaaioueeoauggg printf(“%s\n”, cad); aaaioueeoau scanf(“%[^aeiou]”, cad); Trompetista printf(“%s\n”, cad); Tr Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Anchura de campo: para leer un número específico de caracteres • Ejemplo: scanf(“%2d%d”, &a, &b); 23456 printf(“%d %d\n”, a, b); 23 456 scanf(“%6s”, cad); Tararí que te vi printf(“%s\n”, cad); Tararí Lenguajes de programación LPSI EUI UPM ENTRADA ESTÁNDAR - scanf • Saltar caracteres de la entrada: se incluyen en el formato: • Ejemplo: scanf(“%2d-%2d-%d”,&dia, &mes, &anio); 12-10-06 printf(“%d %d %d\n”, dia, mes, anio); 12 10 06 scanf(“%2d*%2d*%d”,&dia, &mes, &anio); 12/10/06 printf(“%d %d %d\n”, dia, mes, anio); 12 10 06 Lenguajes de programación LPSI EUI UPM