N0K
2004-11-17 12:55:49 UTC
Buenas empiezo con mis primeras dudillas, este programilla lo que va
haciendo es pedir nombres y los almacena en una matriz bidimensional.
Todo va bien, pero en el primer nombre ( nombre[ 0 ] ) por defecto me
mete un retorno de carro, con lo cual pasa directamente a pedirme el
nombre[1]. He probado colocando " fflush(stdin); " en unos cuantos
sitios de la sentencia for donde creo que esta el error. Y por último,
no entiendo la forma en la que se recogen las cadenas de caracteres, "
fin = gets(nombre[fila]); " fin se ha definido antes como char *fin
eso es un puntero verdad ? (aun no he llegado a los punteros) pero no
entiendo como de esta forma se pueden guardar los datos en la matriz.
El código lo compilo en linux no se si tiene algo que ver y como
curiosidad, al compilarlo me suelta esto:
gcc cadenas.c -o cadenas.o
/tmp/ccQAKOIb.o(.text+0xcd): En la función `main':
: warning: the `gets' function is dangerous and should not be used.
Aquí va el código:
/***** Leer una lista de nombres *****/
/* cadenas.c
*/
#include <stdio.h>
#include <stdlib.h>
#define FILAS_MAX 100
#define COLS_MAX 80
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 pulsando las teclas [Ctrl][d].\n");
for (fila = 0; fila < nFilas; fila++)
{
printf("Nombre[%d]: ", fila);
fin = gets(nombre[fila]);
// Si se pulsó [Ctrl][D], salir del bucle
if (fin == NULL) break;
}
nFilas = fila; // número de filas leidas
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]);
}
}
Muchas dudas para recien empezar no ???
Gracias y un saludo,
N0K.
haciendo es pedir nombres y los almacena en una matriz bidimensional.
Todo va bien, pero en el primer nombre ( nombre[ 0 ] ) por defecto me
mete un retorno de carro, con lo cual pasa directamente a pedirme el
nombre[1]. He probado colocando " fflush(stdin); " en unos cuantos
sitios de la sentencia for donde creo que esta el error. Y por último,
no entiendo la forma en la que se recogen las cadenas de caracteres, "
fin = gets(nombre[fila]); " fin se ha definido antes como char *fin
eso es un puntero verdad ? (aun no he llegado a los punteros) pero no
entiendo como de esta forma se pueden guardar los datos en la matriz.
El código lo compilo en linux no se si tiene algo que ver y como
curiosidad, al compilarlo me suelta esto:
gcc cadenas.c -o cadenas.o
/tmp/ccQAKOIb.o(.text+0xcd): En la función `main':
: warning: the `gets' function is dangerous and should not be used.
Aquí va el código:
/***** Leer una lista de nombres *****/
/* cadenas.c
*/
#include <stdio.h>
#include <stdlib.h>
#define FILAS_MAX 100
#define COLS_MAX 80
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 pulsando las teclas [Ctrl][d].\n");
for (fila = 0; fila < nFilas; fila++)
{
printf("Nombre[%d]: ", fila);
fin = gets(nombre[fila]);
// Si se pulsó [Ctrl][D], salir del bucle
if (fin == NULL) break;
}
nFilas = fila; // número de filas leidas
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]);
}
}
Muchas dudas para recien empezar no ???
Gracias y un saludo,
N0K.