elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Por qué mi programa deja de funcionar?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿Por qué mi programa deja de funcionar?  (Leído 6,202 veces)
LML-32

Desconectado Desconectado

Mensajes: 6


Ver Perfil
¿Por qué mi programa deja de funcionar?
« en: 26 Mayo 2016, 05:51 am »

Hola, espero que alguien pueda ayudarme. Estoy programando en C++, guardo una cadena de 25 caracteres y necesito desglosarla por partes, así que sustraje algunos caracteres en variables de tipo string, para luego almacenarlas en vectores (sé que lo puedo hacer sólo con cadenas, pero usarlos es requerimiento para mi práctica).
He estado compilando parte por parte y me di cuenta de que el problema ocurre cuando utilizo más de tres vectores, los primeros tres funcionan bien y corre el programa, pero al leer el cuarto deja de funcionar y no entiendo el por qué, no me marca ningún error ni advertencia.
¿Alguien sabe cómo corregirlo o qué estoy haciendo mal? :c

Mi programa está súper largo, pero este es uno corto que hice para intentar hallar el problema:
Citar
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int main (void)
{
   string m,a,b,c1,c2,d1,d2,e,f;
   string lugar[4],dia[2],hora1[2],hora2[2],vgrados[3],vnudos[2],visib[2],nubes[3];
    cout<<"Teclea un metar (25 caracteres, sin espacios): ";
    cin>>m;
    a=m.substr(0,4);
    b=m.substr(4,2);
    c1=m.substr(6,2);
    c2=m.substr(8,2);
    d1=m.substr(11,3);
    d2=m.substr(14,2);
    e=m.substr(18,2);
    f=m.substr(22,3);
    lugar[4]=a;
    if(lugar[4]=="MMML")
    {
       cout<<"Mexicali";
   }
   else
   {
      if(lugar[4]=="MMTJ")
      {
         cout<<"Tijuana";
      }
   }
    dia[2]=b;
    cout<<"\nDia: "<<dia[2];
    hora1[2]=c1;
    cout<<" Hora: "<<hora1[2];
    hora2[2]=c2;
    cout<<":"<<hora2[2]<<" Zulu.";
    vgrados[3]=d1;
    cout<<vgrados[3];

}


« Última modificación: 26 Mayo 2016, 06:25 am por LML-32 » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #1 en: 26 Mayo 2016, 06:21 am »

Posiblemente es un error de memoria, estas usando algun valor no inicializado o fuera de los limites establecidos.

Pero sin codigo no puedo decirte con exactitud cual es la falla.

Saludos.


En línea

LML-32

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #2 en: 26 Mayo 2016, 06:26 am »

Lo siento, ya agregué el código x)
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #3 en: 26 Mayo 2016, 06:43 am »

Creo que estas omitiendo la posicion del arreglo 0.

Si declaras algo como
Código
  1. string vgrados[3];

No puedes usar la posicion 3, solo la 0, la 1 y la 2 (Solo del 0 al 2) Que siguen siendo 3 posiciones.

Lo mismo para las otras variables....
Otra cosa si vas a usar iostream no necesitas stdio.h

Ya con el namespace es suficiente..

Saludos
En línea

LML-32

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #4 en: 26 Mayo 2016, 06:53 am »

Pero lo que está dentro de los corchetes es la cantidad de caracteres del vector, ¿no?
Funciona todo bien hasta la parte donde indico:
" vgrados[3]=d1;"
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #5 en: 26 Mayo 2016, 06:55 am »

Ademas veo que solo estas usando una cadena de cada arreglo.

No es necesario declarar

 
Código
  1. string variable[4];

Si solo vas a almacenar una cadena.

En dado caso solo declara

 
Código
  1. string variable;


Edito
No es asi, un string ya es un string no tienes que definirle la canitdad de caracteres.

Si por el contrario quieres usar char entonces si necesitas definir la cantidad.

Saludos!


Funciona todo bien hasta la parte donde indico:
" vgrados[3]=d1;"

Es lo que te comento lo que tu declarastes es un arreglo de cadenas y lo puedes tener 3 cadenas diferntes

Código
  1. vgrados[0] = "Cadena 1";
  2. vgrados[1] = "Cadena 2";
  3. vgrados[2] = "Cadena 3";

Si solo vas a usar una cadena solo declara

Código
  1. string vgrados;
« Última modificación: 26 Mayo 2016, 07:05 am por AlbertoBSD » En línea

LML-32

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #6 en: 26 Mayo 2016, 07:08 am »

Cambiando la forma de declararlo sí funciona, pero se supone que tengo que hacer arreglos de tipo vector...

¡Gracias de todos modos! :-)
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #7 en: 26 Mayo 2016, 07:14 am »

Tienes que hacerlo con char?

Código
  1. char m[25];
En línea

LML-32

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #8 en: 26 Mayo 2016, 07:23 am »

Creo que tengo que hacerlo con string, para extraer caracteres. Haz de cuenta que de un código así MMML181441Z32007KT10SMSKC tengo que separar parte por parte para que me diga el lugar, la fecha, etc.

Lo hice como en el código que dejaré abajo (y funciona), pero no sé cómo cambiarlo para usar un arreglo vector.
Código:
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
int main (void)
{
    string a;
    cout<<"Teclea un metar (25 caracteres, sin espacios): ";
    cin>>a;
   
    if(a.substr(0,4)=="MMML")
    {
        cout<<(a.substr(0,4))<<" Lugar- Aeropuerto Internacional de Mexicali";
    }
    else
    {
    if(a.substr(0,4)=="MMTJ")
    {
cout<<(a.substr(0,4))<<" Lugar- Aeropuerto Internacional de Tijuana";
}
else
{
cout<<"Aeropuerto desconocido";
}
}
   
   cout<<"\n"<<(a.substr(4,7))<<" Fecha y hora- Dia: "<<(a.substr(4,2))<<" Hora: "<<(a.substr(6,2))<<":"<<(a.substr(8,2))<<" Zulu.";
   cout<<"\n"<<(a.substr(11,7))<<" Viento- "<<(a.substr(11,3))<<" grados con "<<(a.substr(14,2))<<" nudos.";
   cout<<"\n"<<(a.substr(18,4))<<" Visibilidad- "<<(a.substr(18,2))<<" millas.";
   
    if(a.substr(22,3)=="SKC")
                            {
                            cout<<"\n"<<(a.substr(22,3))<<" Nubes- Sky clear, despejado.";
}
else
{
if(a.substr(22,3)=="SCT")
{
cout<<"\n"<<(a.substr(22,5))<<" Nubes- Scattered, dispersas.";
    }
    else
    {
    if(a.substr(22,3)=="OVC")
{
cout<<"\n"<<(a.substr(22,5))<<" Nubes- Overcast, cerrado.";
        }
        else
        {
        if(a.substr(22,3)=="TCU")
{
cout<<"\n"<<(a.substr(22,5))<<" Nubes- Towering cumulus.";
        }
        else
        {
        if(a.substr(22,3)=="FEW")
{
cout<<"\n"<<(a.substr(22,5))<<" Nubes- Few, escasas.";
        }
        else
        {
        if(a.substr(22,3)=="BKN")
{
cout<<"\n"<<(a.substr(22,5))<<" Nubes- Broken, fragmentadas.";
    }
    else
    {
    if(a.substr(22,3)=="0CB")
{
cout<<"\n"<<(a.substr(22,5))<<" Nubes- Cumulonimbus.";
    }
    else
    {
    cout<<"\n"<<(a.substr(22,3))<<" Nubes- No hay nubes.";
}
}
    }
    }
}
}
}
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: ¿Por qué mi programa deja de funcionar?
« Respuesta #9 en: 26 Mayo 2016, 07:30 am »

A ver te dejo una version  :rolleyes: :rolleyes: Que involucra puros char...

Código
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. using namespace std;
  5.  
  6. int main (void) {
  7. char m[25],a[5]="",b[3]="",c1[3]="",c2[3]="",d1[4]="",d2[3]="",e[5]="",f[4]="";
  8. cout<<"Teclea un metar (25 caracteres, sin espacios): ";
  9. cin>>m;
  10. memcpy(a,m,4);
  11. memcpy(b,m+4,2);
  12. memcpy(c1,m+6,2);
  13. memcpy(c2,m+8,2);
  14. memcpy(d1,m+11,3);
  15. memcpy(d2,m+14,2);
  16. memcpy(e,m+18,2);
  17. memcpy(f,m+22,3);
  18.  
  19. if(strcmp(a,"MMML") == 0)
  20. {
  21. cout<<"Mexicali";
  22. }
  23. else
  24. {
  25. if(strcmp(a,"MMTJ") == 0)
  26. {
  27. cout<<"Tijuana";
  28. }
  29. }
  30. cout<<"\nDia: "<<b;
  31. cout<<" Hora: "<<c1;
  32. cout<<":"<<c2<<" Zulu.";
  33. cout<<d1;
  34. }

Si lo que quieres es usar un arreglo de cadenas entonces...

Declara solo 2 variables

Código
  1. string m,arreglo[N];

Y cuando copies las cadenas al arreglo como ya lo haces usa:

Código
  1. arreglo[0] = m.substr(4,7);
  2. arreglo[1] = m.substr(6,2);
  3. // Asi sucesivamente
  4.  

El detalle es que todas las variables tendran el nombre de arrglo... lo cual no es muy sugerente de que contiene esa variable.

Saludos
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Hoy deja de funcionar el 11818
Noticias
wolfbcn 0 1,684 Último mensaje 1 Enero 2012, 18:36 pm
por wolfbcn
[Solucionado] Programa deja de funcionar
Programación C/C++
oscarX3M 2 2,515 Último mensaje 5 Junio 2014, 01:46 am
por oscarX3M
Teclado deja de funcionar
Hardware
alexconan 3 3,157 Último mensaje 30 Junio 2014, 19:53 pm
por Aprendiz-Oscuro
[Resuelto] mysqli rollback deja de funcionar en php 7
PHP
gAb1 1 2,983 Último mensaje 8 Junio 2016, 18:22 pm
por gAb1
El programa deja de funcionar
Programación C/C++
Naimaderis 9 3,791 Último mensaje 17 Diciembre 2016, 01:10 am
por Naimaderis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines