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.