Problema de matrices de caracteres y funciones. C
Publicado por Raúl (1 intervención) el 14/07/2020 18:42:49
[Hola buenas, quería preguntar un par de dudas sobre este programa que no entiendo:
1º El uso del puntero en la función *leerCadena, entiendo que la matriz no se puede pasar por valor y hace el uso por referencia pero no entiendo el char *leerCadena.
2º Dentro de la función leerCadena hace uso de otro puntero para char *fin, el valor devuelto y no entiendo el por qué.
Si alguien me lo pudiera aclarar se lo agredecería mucho. Un saludo.
1º El uso del puntero en la función *leerCadena, entiendo que la matriz no se puede pasar por valor y hace el uso por referencia pero no entiendo el char *leerCadena.
2º Dentro de la función leerCadena hace uso de otro puntero para char *fin, el valor devuelto y no entiendo el por qué.
Si alguien me lo pudiera aclarar se lo agredecería mucho. Un saludo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/****************** Leer una lista de nombres ******************/
/* cadenas.c
*/
#include <stdio.h>
#include <string.h>
#define FILAS_MAX 100
#define COLS_MAX 40
char *leerCadena(char *, int);
main()
{
// Matriz de cadenas de caracteres
char nombre[FILAS_MAX][COLS_MAX];
int nFilas = 0;
int fila = 0;
char *fin, respuesta;
do
{
printf("Número de filas de la matriz: ");
scanf("%d", &nFilas);
} while (nFilas < 1 || nFilas > FILAS_MAX);
fflush(stdin);
printf("Escriba los nombres que desea introducir.\n");
printf("Puede finalizar introduciendo la marca EOF.\n");
for (fila = 0; fila < nFilas; fila++)
{
printf("Nombre[%d]: ", fila);
fin = leerCadena(nombre[fila], COLS_MAX);
// Si se pulsó [Ctrl][z], salir del bucle
if (fin == NULL) break;
}
nFilas = fila; // número de filas leídas
do
{
printf("¿Desea visualizar el contenido de la matriz? (s/n): ");
respuesta = tolower(getchar());
fflush(stdin);
}
while (respuesta != 's' && respuesta != 'n');
if (respuesta == 's')
{
// Visualizar la lista de nombres
printf("\n");
for (fila = 0; fila < nFilas; fila++)
printf("%s\n", nombre[fila]);
}
}
char *leerCadena(char *cadena, int n)
{
int ncars;
char *fin;
fin = fgets(cadena, n, stdin);
ncars = strlen(cadena);
if (ncars < COLS_MAX - 1)
cadena[ncars - 1] = '\0'; // sustituir el '\n'
fflush(stdin); // limpiar lo que quede en el buffer
return fin;
}
Valora esta pregunta


0