P. 1
Funciones de Lectura y Escritura

Funciones de Lectura y Escritura

|Views: 114|Likes:

More info:

Published by: Alain Acevedo Mejía on Feb 24, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

11/24/2013

pdf

text

original

Funciones de lectura y escritura en C/C

++
Las funciones printf y scanf
La función scanf permite leer secuencias de caracteres con un formato especificado previamente, guardando los valores en las variables especificadas y devolviendo como función el número de elementos leídos correctamente. Su sintaxis es scanf(“<formato>”,<variables>); En formato se pueden colocar los especificadores particulares de los tipos de datos que se van a leer. En variables, a menos que sea una cadena, se coloca un & antes de cada una (en realidad esto es un apuntador), separándolas por comas. Cuando se lee una cadena de caracteres scanf por defecto lee hasta encontrar una espacio, tabulación, salto de línea o el final del archivo. Especificador %c %s %d, %i %u %ld %lu %lld %llu %e, %f, %g %lf %o %x %[patron] Tipo char cadena int unsigned int long int unsigned long int long long int unsigned long long int float double número octal número hexadecimal patron

Cuando se usa %[patron] scanf lee una cadena de caracteres hasta encontrar un caracter que no se encuentre en los especificados dentro de los corchetes. Esto nos permite leer cadenas con espacios intercalados, leer hasta encontrar un punto o una coma, leer solo números o funciones similares. Además, si se usa %[^patron] scanf leerá hasta encontrar alguno de los caracteres de la lista del patrón, es decir, se invierte su uso. La función printf permite imprimir texto con formato utilizando una sintaxis similar a la de scanf. Se usan los mismos identificadores, aunque en las variables no hace falta usar &'s, solo se colocan los nombres de las variables. Cabe mencionar que el especificador para long long int es %lld en sistemas operativos de la familia Linux y %I64d en sistemas Windows. Confundir esto lleva a fallas en el funcionamiento del programa, y generalmente el compilador no detecta este tipo de errores.

La función sscanf
En ocasiones requerimos leer una cadena de caracteres y después obtener de ella variables numéricas. En estos casos, en los que necesitamos “leer dos veces” una misma entrada, contamos con la función sscanf que nos permite leer un texto con formato de una cadena de caracteres previamente leída. Su sintaxis es la misma que la se scanf, pero se incluye adicionalmente, previo a las indicacionesdel

c=getchar()."%s %*s %d".. no ungetc(c.. Nota: En C. Esta función lee una cadena de caracteres hasta encontrar un salto de línea.str. c=cin. tiene el inconveniente de guardar en memoria todo lo que encuentre antes del salto de línea aún si el arreglo de caracteres del argumento no tiene espacio para ello. pero podemos hacerlo usando estas dos funciones.stdin stdio. sin embargo. el nombre del arreglo de caracteres sobre el que se va a leer. Leyendo linea por linea Para leer de este modo. lo que lleva a errores en la memoria. Ejemplos: cout << “Enunciado” << endl.formato.h existe una función equivalente a cin. cout << “Hello.get(). Su sintaxis es cin >> variable_1 >> variable_2 >> .peek(). Proporcionan una sintaxis más sencilla. Ejemplos . que permite especificar una cantidad máxima de caracteres a leer. Para evitar estas situaciones podemos hacer uso de la función fgets. >> variable_n. podemos usar la función gets.h Regresa el caracter leído o EOF en caso de haber alcanzado el fin de archivo.h Regresa el caracter leído o EOF en caso de haber alcanzado el fin de archivo. I am ” << age << “ years old and my zipcode is ” << zipcode. aunque en tiempo de ejecución ocupan más tiempo. iostream Regresa el caracter leído o EOF en caso de haber alcanzado el fin de archivo. La función cin permite leer una entrada con formato. Ejemplo: sscanf (sentence.. ). cout << x. además del origen de la entrada.peek(). Regresa el caracter leído o EOF en caso de haber alcanzado el fin de archivo. Nota: No retira el c=cin. cin >> a >> b >> c. Librería Descripción stdio. Para indicar un salto de línea podemos usar endl como argumento.. Para emplearlas debe incluirse la biblioteca iostream. Y de forma análoga con cout tenemos cout << variable_1 << . c=getc(stdin). Regresa el caracter leído o EOF en caso de haber alcanzado el fin de archivo. cin >> a.&i). Leyendo caracter a caracter Para leer carácter a carácter disponemos de las siguientes funciones: Función c=getc(stdin). cout << 120. << variable_n . iostream carácter del flujo de entrada. Las funciones cin y cout Las funciones cin y cout son la versión en C++ de printf y scanf. stdio.

} #include <cstdio> using namespace std. b. Podemos preguntar si un caracter leído regresó fin de archivo simplemente comparandolo con EOF: if(c==EOF) return 0.Hashmat the brave warrior. mientras que en Windows por lo general es posible hacerlo con Ctrl+Z. Código Tiempo Memoria 0. la solución de cada caso es la diferentecia entre el mayor y el menor de los números. } Usar nuestra propia función de lectura en lugar de "scanf" Siguiendo con el ejemplo anterior. En C/C++ se simboliza con EOF (End of File).b << endl.420 388 Tiempo Memoria (S) (Kb) 1. a continuación se muestra el resultado de sustituir la función scanf por una versión propia.b). b. fgets(nombre. while(scanf("%lld%lld". a .30. else printf("%lld\n". Código #include <iostream> using namespace std. b . Optimización de la lectura En el problema de la UVA Online Judge 10055 . En sistemas operativos de la familia Linux es posible entrar el caracter de fin de archivo en la consola presionando Ctrl+D. main() { long long a. main() { long long a. &a. En la siguiente tabla se muestra cual es el efecto de cambiar la forma de leer los datos en este problema. Caracter de fin de archivo Mas que un caracter.gets(nombre). es un valor que indica que se ha llegado al final de un archivo o que ha finalizado la transmisión o transferencia de datos.a).stdin). while(cin >> a >> b) if (a > b) cout << a . &b) == 2) if (a > b) printf("%lld\n".133 436 .

el código aumento en tamaño y ligeramente en complejidad. Sin embargo. a . while(buffer[pos] != ' ') a = a*10 + buffer[pos++] . long long a.'0'.net/posts/ciencia-educacion/14450390/Lectura-de-cadenas-en-C.cplusplus.244 388 Como se ve.html http://www.mx/lectura. b.(S) #include <cstdio> using namespace std.taringa.utm. pos.utm.cplusplus. Referencias http://mictlan. } } (Kb) 0. while(gets(buffer) && !feof(stdin)) { pos = a = b = 0.mx/optimizacion.utm. if (a > b) printf("%lld\n".b). b . se obtuvo una mejora significativa en el tiempo de ejecución. while(buffer[pos] != 0) b = b*10 + buffer[pos++] . main() { char buffer[1024].html http://es. lo cual puede fomentar la aparición de errores en caso de no implementar bien la función de lectura. pos++.com/reference/cstdio/fgets/ .a).wikipedia. else printf("%lld\n".'0'.wikipedia.com/doc/tutorial/basic_io/ http://www.mx/ http://mictlan.org/wiki/Scanf http://www.html http://mictlan.org/wiki/Scanf http://en.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->