lectura de

#include <stdio.h>
#include <string.h>

// esta función elimina los saltos de línea que guarda fgets() cuando no se alcanza el límite de carácteres
void eliminarSaltosDeLinea(char array[]);

int main () {
    int edad;
    char nombre[50], direccion[100];
    // este array va a ser usado para almacenar temporalmente los datos que se le van a pasar a sscanf()
    char temporal[50];
    
    // guardar el nombre con fgets()
    // prototipo: fgets(variable donde se va a guardar la cadena de texto, límite de caracteres, lugar desde el que va a leer);
    // 1. esta función guarda n-1 carácteres, en este caso 49 y permite guardar los espacios
    // 2. "stdin" le indica que lea lo que se ingrese desde el teclado
    printf("Nombre: ");
    fgets(nombre, 50, stdin);
    eliminarSaltosDeLinea(nombre);
    
    // guardar la edad como un entero usando sscanf()
    // prototipo: sscanf(array de caracteres, "los tipos de datos", variables en las que se van a guardar los datos");
    // 1. guardo lo ingresado por teclado como un string usando fgets()
    // 2. se definió "temporal" con un tamaño de 50, pero en fgets() se puso 4 como límite para que guarde un numero de 2 dígitos y un '\0'
    // 3. es importante que consideren el NULL cuando pongan el límite de carácteres, de lo contrario se va a saltar los próximos fgets()
    // 4. la función fgets() guarda un salto de línea ('\n') siempre que se ingresan menos carácteres que el límite que se indico
    // 5. lo anterior debiera pasar siempre ya que tenemos que considerar el '\0' de los strings, por lo tanto tenemos que dejar como mínimo un espacio libre
    // 6. se usa "temporal" (que es un string) para guardar lo ingresado por teclado como un numero entero usando sscanf()
    printf("Edad: ");
    fgets(temporal, 4, stdin);
    sscanf(temporal, "%d", &edad);
    
    // comprobando que no se produzcan errores al usar fgets() - sscanf() - fgets() seguidos
    printf("Direccion: ");
    fgets(direccion, 100, stdin);
    eliminarSaltosDeLinea(direccion);
    
    // muestro la información
    printf("Su nombre es %s\n", nombre);
    printf("Su edad es %d\n", edad);
    printf("Su direccion es: %s\n", direccion);
    return 0;
}

void eliminarSaltosDeLinea(char array[]) {
    // strlen() obtiene el largo del array, incluyendo el '\0'
    // si la penúltima posición (la última se sabe que es '\0' por tratarse de un string) es un salto de línea ('\n') entonces lo reemplaza por '\0'
    if (array[strlen(array)-1]=='\n') {
        array[strlen(array)-1]='\0';
        printf("Elimine el salto de linea...\n");
    }
}

Cuando le paso un arreglo unidimensional(vector) a una función, lo paso por referencia (la dirección de memoria), y se modifica el original. Cuando definimos la función, no es necesario colocar el tamaño, este adoptara solo el tamaño del arreglo que se le pase.

Si nuestro arreglo es de dos o mas dimensiones, debemos especificar los tamaños de las dimensiones.

Blog Logo

Juan Pablo Escalona G.


Publicado el

comments powered by Disqus
Image

JPEG {codes}

Códigos azarosos en múltiples lenguajes, JavaScript, Ruby, C, Python. Bienvenidos aquellos que quieran aprender.

Volver al inicio