Autor
|
Tema: ¿Por qué mi programa deja de funcionar? (Leído 6,303 veces)
|
LML-32
Desconectado
Mensajes: 6
|
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: #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
Mensajes: 3.705
🏴 Libertad!!!!!
|
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
Mensajes: 6
|
Lo siento, ya agregué el código x)
|
|
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
Creo que estas omitiendo la posicion del arreglo 0. Si declaras algo como 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
Mensajes: 6
|
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
Mensajes: 3.705
🏴 Libertad!!!!!
|
Ademas veo que solo estas usando una cadena de cada arreglo. No es necesario declarar string variable[4];
Si solo vas a almacenar una cadena. En dado caso solo declara 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 vgrados[0] = "Cadena 1"; vgrados[1] = "Cadena 2"; vgrados[2] = "Cadena 3";
Si solo vas a usar una cadena solo declara string vgrados;
|
|
« Última modificación: 26 Mayo 2016, 07:05 am por AlbertoBSD »
|
En línea
|
|
|
|
LML-32
Desconectado
Mensajes: 6
|
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
Mensajes: 3.705
🏴 Libertad!!!!!
|
Tienes que hacerlo con char? char m[25];
|
|
|
En línea
|
|
|
|
LML-32
Desconectado
Mensajes: 6
|
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. #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
Mensajes: 3.705
🏴 Libertad!!!!!
|
A ver te dejo una version Que involucra puros char... #include<iostream> #include<stdio.h> #include<string.h> using namespace std; int main (void) { char m[25],a[5]="",b[3]="",c1[3]="",c2[3]="",d1[4]="",d2[3]="",e[5]="",f[4]=""; cout<<"Teclea un metar (25 caracteres, sin espacios): "; cin>>m; { cout<<"Mexicali"; } else { { cout<<"Tijuana"; } } cout<<"\nDia: "<<b; cout<<" Hora: "<<c1; cout<<":"<<c2<<" Zulu."; cout<<d1; }
Si lo que quieres es usar un arreglo de cadenas entonces... Declara solo 2 variables string m,arreglo[N];
Y cuando copies las cadenas al arreglo como ya lo haces usa: arreglo[0] = m.substr(4,7); arreglo[1] = m.substr(6,2); // Asi sucesivamente
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Hoy deja de funcionar el 11818
Noticias
|
wolfbcn
|
0
|
1,713
|
1 Enero 2012, 18:36 pm
por wolfbcn
|
|
|
[Solucionado] Programa deja de funcionar
Programación C/C++
|
oscarX3M
|
2
|
2,559
|
5 Junio 2014, 01:46 am
por oscarX3M
|
|
|
Teclado deja de funcionar
Hardware
|
alexconan
|
3
|
3,210
|
30 Junio 2014, 19:53 pm
por Aprendiz-Oscuro
|
|
|
[Resuelto] mysqli rollback deja de funcionar en php 7
PHP
|
gAb1
|
1
|
2,999
|
8 Junio 2016, 18:22 pm
por gAb1
|
|
|
El programa deja de funcionar
Programación C/C++
|
Naimaderis
|
9
|
3,846
|
17 Diciembre 2016, 01:10 am
por Naimaderis
|
|