Foros del Web » Programación para mayores de 30 ;) » C/C++ »

For y lectura de Cadenas de Char (problema)

Estas en el tema de For y lectura de Cadenas de Char (problema) en el foro de C/C++ en Foros del Web. Hola ! cree un programa que muestre un menu. al seleccionar la opcion 1 me permite ingresar lo que le pido (10 veces) "for" luego ...
  #1 (permalink)  
Antiguo 24/05/2007, 20:22
 
Fecha de Ingreso: mayo-2007
Mensajes: 1
Antigüedad: 17 años
Puntos: 0
For y lectura de Cadenas de Char (problema)

Hola !
cree un programa que muestre un menu.
al seleccionar la opcion 1 me permite ingresar lo que le pido (10 veces) "for"
luego que terminan de pasar las 10 veces el vuelve al menu y si selecciono la opcion 2 el me imprimira todo lo que le escribi.

Ok, el problema es que, cuando en el ingreso deseo que me lea un nombre
no me lo permite
EJEMPLO

for (a=1;a<10;a++)
{
printf("escribe tu nombre: ");
gets (cliente.nombre[a]);

me dice que no puede copiar un valor char to char.

entonces no se que poner.

porque si uso scanf ("%s",&cliente.nombre[a]);
unicamente me lee hasta el primer espacio en blanco y no puedo escribir el nombre entero.


Alguna idea ?

Les dejo el codigo


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct fecha{
int dia[10];
int mes[10];
int ano[10];
};

struct cuenta{
int no_cuenta[10];
char tipo_cuenta[10];
char nombre[80];
float saldo[10];
struct fecha fechapago;
};
struct cuenta cliente;

void main ()

{
int seleccion,a;
inicio:
printf ("\n\n\n\n");
printf ("\t\t//////////////////////////////////////////\n");
printf ("\t\t// Menu //");
printf ("\n\t\t/////////////////////////////////////////\n\n\n");
printf ("\n");
printf ("\t\t 1. Captura de datos\n");
printf ("\t\t 2. Lectura de datos\n");
printf ("\t\t 3. Salir");
printf ("\n\n\t\t Seleccione una Opcion: ");
scanf ("%d",&seleccion);
switch (seleccion)
{
/// OPCIONES

case 1:
goto INGRESO;
break;

case 2:
goto IMPRIMIR;
}








/////////////////////////////////////////////////////////////////
INGRESO:

for (a=1;a<3;a++){


printf ("\n\n\n\n");
printf ("\t\t//////////////////////////////////////////\n");
printf ("\t\t// Registro #:%d //",a);
printf ("\n\t\t/////////////////////////////////////////\n\n\n");
printf ("\t\tIngrese el Numero de la Cuenta: ");
scanf ("%d",&cliente.no_cuenta[a]);// Numero de Cuenta

printf ("\n\t\tIngrese Tipo Cuenta: ");
scanf ("%s",&cliente.tipo_cuenta[a]);//TIPO DE CUENTA

printf ("\n\t\tIngrese Nombre del Cliente: ");
gets (cliente.nombre[a]);//NOMBRE

printf ("\n\t\tIngrese el Saldo: ");
scanf ("%d",&cliente.saldo[a]);// Saldo

printf ("\n\t\tIngrese Fecha Dia: ");
scanf ("%d",&cliente.fechapago.dia[a]);//Dia
printf ("\n\t\tIngrese Fecha Mes: ");
scanf ("%d",&cliente.fechapago.mes[a]);//Mes
printf ("\n\t\tIngrese Fecha Ano: ");
scanf ("%d",&cliente.fechapago.ano[a]);//Ano

system ("cls");
}


goto inicio;


//////////////////////////////////////////////////////////////////




//////////////////////////////////////////////////////////////////
IMPRIMIR:

for (a=1;a<3;a++){
printf ("\n\n\n\n");
printf ("\t\t//////////////////////////////////////////\n");
printf ("\t\t// **** Resultado #:%d **** //",a);
printf ("\n\t\t/////////////////////////////////////////\n\n\n");
printf ("\n\t\tNumero de La cuenta: %d\n",cliente.no_cuenta[a]);
printf ("\n\t\ttipo cuenta: %c\n",cliente.tipo_cuenta[a]);
printf ("\n\t\tNombre del Cliente: %s\n",cliente.nombre[a]);
printf ("\n\t\tSaldo: %.2f\n",cliente.saldo[a]);
printf ("\n\t\tFecha (dia/Mes/ano): %d/%d/%d \n\n",cliente.fechapago.dia[a],cliente.fechapago.mes[a],cliente.fechapago.ano[a]);
printf ("\n\n");
printf ("\t\t**Presione alguna tecla para continuar**");
getch();//Permite ver el resultado y que al apretar una tecla mande al otro registro nuevo
system ("cls");
}



//////////////////////////////////////////////////////////////////
}
  #2 (permalink)  
Antiguo 24/05/2007, 21:36
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: For y lectura de Cadenas de Char (problema)

Toma en cuenta que el mienbro que llamaste nombre dentro de tu estructura "cuenta" es un arreglo de char en el que puedes almacenar hasta 80 elementos de ese tipo (contando el caracter '\0') cuando haces:
Código:
scanf ("%s",&cliente.nombre[a]);
le estas indicando que vas a almacenar la info en la posicion a de tu arreglo, es decir, un solo caracter.

Si lo que quieres es almacenar varios nombres puedes hacer algo como:
Código:
scanf ("%s", cliente[a].nombre);
o:
Código:
gets (cliente[a].nombre);
Y por supuesto ahora cliente no debe ser una variable sencilla si no un arreglo. Lo que te puse te permite almacenar varios datos para diferentes "clientes".

Ahora bien, si lo que quieres es leer un solo nombre solo debes hacer:
Código:
gets (cliente.nombre);
o con el scanf:
Código:
scanf ("%s", cliente.nombre);
Espero te sirva de ayuda, si no ayudaria un poco que fueras mas claro en la explicación de lo que se supone debe hacer el programa.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:

Última edición por _Lucifer_; 24/05/2007 a las 21:37 Razón: Error de sintaxis.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:44.