C/Visual C - Problema de matrices de caracteres y funciones. C

 
Vista:
sin imagen de perfil
Val: 2
Ha aumentado su posición en 15 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

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
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Problema de matrices de caracteres y funciones. C

Publicado por Nacho (76 intervenciones) el 15/07/2020 15:56:02
Un puntero a una cadena puede pasarse como un puntero al primer char. Y el char* fin es que prefiere hacerlo así.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar