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

Ayuda, no puedo leer cadenas con espacios

Estas en el tema de Ayuda, no puedo leer cadenas con espacios en el foro de C/C++ en Foros del Web. Hola a todos, uso el Dev C++ y me encuentro haciendo un trabajo de la u, donde, dbeo emular a un banco, el punto es ...
  #1 (permalink)  
Antiguo 22/10/2010, 13:42
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Ayuda, no puedo leer cadenas con espacios

Hola a todos, uso el Dev C++ y me encuentro haciendo un trabajo de la u, donde, dbeo emular a un banco, el punto es que cuando debo almacenar el nombre y apellido del usuario a causa del espacio no puedo usar "string" entonces lei y vi que debia hacer un array de char y leer con "gets" pero cuando compilo no me lee el nombre, les anexo el codigo fuente, (aun no lo temrino xq n me corre esa parte)
Código:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
int main(){
      int i,op, pos,code,n=0;
      char nombre[35];
      char q;
      float dinero;
      struct{
       int cod;
       char name[35];
       float money;
      }A[50];
    
      do{system("cls");
         cout<<"\n";
         cout<<"***********************************************\n";
         cout<<"*****************BIENVENIDO********************\n";
         cout<<"***********************************************\n";
         cout<<"\n\n\n";
         cout<<"*\t\t\t(1)Abrir cuenta\n*\t\t\t(2)Cerrar Cuenta\n*\t\t\t";
         cout<<"(3)Consultar Cuenta\n*\t\t\t(4)Consignar a la cuenta\n*";
         cout<<"\t\t\t(5)Retirar de la cuenta\n*\t\t\t(6)Listar cuentas";
         cout<<"\n*\t\t\t(7)Finalizar";
         cout<<"\n\n\t\t\t\tDigite una opcion";
         cin>>op;
         while(op<1||op>7){
                           cout<<"\nERROR: Opcion invalida\n ";
                           cin>>op;
         }
      
         switch (op){
                case 1:
                do{system("cls");
                     do{  
                          pos=-1;
                          cout<<"\n\nPorfavor ingrese el codigo de identificacion\n";
                          cin>>code;
                          for (i=0;i<n-1;i++){
                               if(A[i].cod==code){pos=i;}
                          }
                          if (pos!=-1){
                          cout<<"\nError: El codigo ingresado ya existe!!!!!\n";
                          cout<<"\nCodigo: "<<A[pos].cod;
                          printf ("%s\n",A[pos].name);
                          cout<<"\nMonto: $"<<A[pos].money;}
                          else
                          A[n].cod=code;
                     }while(pos!=-1);
                     printf("\nAhora ingrese su primer nombre y apellido %s\n ");
                     gets(nombre);
                     n++;
                     A[n].name[35]=nombre[35];
                     cout<<"\nPor ultimo ingrese el monto de dinero que desea guardar\n";
                     cin>>dinero;
                     while(dinero<=0){
                                      cout<<"\nERROR:Valor invalido\n";
                                      cin>>dinero;
                     }
                     A[n].money=dinero;
                     cout<<"\nDesea crear otra cuenta? (Y/N)\n";
                     cin>>q;
                }while(q=='y' || q=='Y');
                break;
                case 2:
                do{system("cls");
                          pos=-1;
                          cout<<"\n\nPorfavor ingrese el codigo de identificacion\n";
                          cin>>code;
                          for (i=0;i<n-1;i++){
                               if(A[i].cod==code){pos=i;}
                          }
                          if (pos>-1){
                                 cout<<"\nCodigo: "<<A[pos].cod;
                                 puts (A[pos].name);
                                 cout<<"\nMonto: $"<<A[pos].money;
                                 cout<<"\nRealmente desea elminar la cuenta?(Y/N)\n";
                                 cin>>q;
                                 if(A[pos].money==0){
                                      if(q=='y'||q=='Y'){
                                         for(i=pos;i<n-1;i++){A[i]=A[i+1];}
                                          n=n-1;
                                      }
                                 }else{cout<<"\nERROR: No se puede cerrar cuenta porque aun tiene dinero guardado\n";}
                           }else{cout<<"\nERROR: Cuenta inexistente\n";}
                                 cout<<"\nDesea eliminar otra cuenta? (Y/N)\n";
                cin>>q;
                }while(q=='y' || q=='Y');
                break;
                case 3:
                do{system("cls");
                        pos=-1;
                        cout<<"\n\nPorfavor ingrese el codigo de identificacion\n";
                        cin>>code;
                        for (i=0;i<n-1;i++){
                             if(A[i].cod==code){pos=i;}
                        }
                        if (pos>-1){
                                 cout<<"\nCodigo: "<<A[pos].cod;
                                 printf("%s\n",A[pos].name);
                                 cout<<"\nMonto: $"<<A[pos].money;
                        }else{cout<<"\nERROR: Cuenta inexistente\n";}
                        cout<<"\nDesea consultar otra cuenta? (Y/N)\n";
                        cin>>q;
                }while(q=='y' || q=='Y');
                break;
         }
         cout<<"\nVolver a menu? (Y/N)\n";
         cin>>q;
      }while(q=='y' || q=='Y');
}
Espero respuesta gracias :)
  #2 (permalink)  
Antiguo 22/10/2010, 18:01
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda, no puedo leer cadenas con espacios

Esta asignacion que haces
A[n].name[35]=nombre[35];
No es correctas ahi estas asignando el caracter numero 35 (segun las definicion no existe porque los array empiezan a contar desde cero, asi que llegan a 35) de la variable nombre a la variable name de la structura.

Yo te diria que hagas un strcpy de esta forma:
strcpy(A[n].name,nombre);

Esto va a copiar caracter a caracter.
  #3 (permalink)  
Antiguo 22/10/2010, 21:57
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda, no puedo leer cadenas con espacios

Gracias por el dato sam90 ;)
Sin embargo no resolvieron mi duda, pero giual gracias por aquellos que se tomaron el timepo de leer esto.
pero lo curioso es que tube que leer la el array de caracteres con dos funciones distintas para que el programa me pudiese pedir que ingresara la cadena, y si dejo uno solo no sale, entonces existe algun tipo de prioridad en c++?

Es decir tube que ponerlo asi:
Código:
                     cout<<"\nAhora ingrese su primer nombre y apellido \n ";
                     fgets(nombre,35,stdin);
                     cin.getline(nombre,35);
                     strcpy(A[n].name,nombre);
Si le quito el fgets o el getline al ejecutar simplemente se salta la linea donde me debe pedir que ingrese el valor del array de carcteres "nombre".

PD: Uso DevC++

Última edición por lukz101; 23/10/2010 a las 00:36
  #4 (permalink)  
Antiguo 23/10/2010, 09:12
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Ayuda, no puedo leer cadenas con espacios

Trata de evitar el uso de gets(), si necesitas leer cadenas con espacion en eelos utilizando scanf basta con hacer lo siguiente.

scanf("[^\n]", tucadena);
  #5 (permalink)  
Antiguo 24/10/2010, 22:02
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Ayuda, no puedo leer cadenas con espacios

Okz, el trabajo lo presente con el gets, pero ademas de tener que usar fflush que otro problema trae gets que todos me dicen que no lo use :S
  #6 (permalink)  
Antiguo 06/02/2011, 11:13
 
Fecha de Ingreso: febrero-2011
Mensajes: 1
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Ayuda, no puedo leer cadenas con espacios

[QUOTE=Trovaz;3608314]Disculpen tengo un mismo problema debo leer el nombre de una ciudad ej: San jose pero al usar cin>> cuando hago el espacio se lo asigna a otra variable con ese scanf("[^\n]", tucadena) prodre leer cadenas de caracteres con espacion gracias???
  #7 (permalink)  
Antiguo 07/02/2011, 13:36
 
Fecha de Ingreso: octubre-2010
Ubicación: Edo. de México
Mensajes: 94
Antigüedad: 13 años, 6 meses
Puntos: 9
Respuesta: Ayuda, no puedo leer cadenas con espacios

Si con scanf puedes leer cadenas con espacios, solo hago una pequeña corrección. Se deba hacer de la siguiente manera.


Código C++:
Ver original
  1. scanf("%[^\n]", miCadena);

obviamente miCadena es un arreglo de caracteres con espacio suficiente en memoria.

Etiquetas: cadenas, espacios
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 07:12.