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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al comparar cadenas en estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al comparar cadenas en estructuras  (Leído 3,042 veces)
ramona98

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Error al comparar cadenas en estructuras
« en: 27 Agosto 2013, 16:01 pm »

Hola,

No se que problema puede existir pero no obtengo el resultado deseado:

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
//Exercise 12-4: Write a program that lists all the planes that leave from two
//airports specified by the user.
 
int main(void)
{
   int i;
   char city1[2], city2[2]; // airports specified by the user
 
 struct airline {
   int flight_N; // Flight number
   char origin_airp[];  // Originating airport code (three characters)
   char desti_airp[]; //Destination airport code (three characters)
   int start_time[];  //Starting time
   int arrive_time[];  //Arrival time
   };
 
  struct airline myfli[4];
 
 
    myfli[0].flight_N = 329;
strcpy(myfli[0].origin_airp,"ABC");
strcpy(myfli[0].desti_airp,"KID");
myfli[0].start_time[0] = 05;
myfli[0].start_time[1] = 30;
myfli[0].arrive_time[0] = 10;
myfli[0].arrive_time[1] = 55;
 
myfli[1].flight_N = 323;
strcpy(myfli[1].origin_airp,"CCC");
strcpy(myfli[1].desti_airp,"LLI");
myfli[1].start_time[0] = 05;
myfli[1].start_time[1] = 30;
myfli[1].arrive_time[0] = 9;
myfli[1].arrive_time[1] = 55;

myfli[2].flight_N = 559;
strcpy(myfli[2].origin_airp,"BBB");
strcpy(myfli[2].desti_airp,"AAA");
myfli[2].start_time[0] = 07;
myfli[2].start_time[1] = 30;
myfli[2].arrive_time[0] = 10;
myfli[2].arrive_time[1] = 55;
   
    strcpy(city1,"ABC");
    strcpy(city2,"CCC");
   
   
    for (i = 0; i < 4; ++i) {
   
    if (strcmp(myfli[i].origin_airp, city1) == 0 || strcmp(myfli[i].origin_airp, city2) == 0 ){
        printf("Plane Numer: %d\n", myfli[i].flight_N); }
   
    }
 
 
return (0);
}

En el ultimo for y if intento rastear todos los registros de la estructura buscando si coinciden las cadenas city1 y city2 para imprimirlas, pero el resulado impreso no tiene nada que ver con los datos que tenemos :(


Gracias y saludos!


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error al comparar cadenas en estructuras
« Respuesta #1 en: 27 Agosto 2013, 16:21 pm »

Errores importantes hay varios:

* No indicar el numero de elementos de los arrays:
Código
  1. struct airline {
  2.   int flight_N; // Flight number
  3.   char origin_airp[];  // Originating airport code (three characters)
  4.   char desti_airp[]; //Destination airport code (three characters)
  5.   int start_time[];  //Starting time
  6.   int arrive_time[];  //Arrival time
  7. };
Ahí los arrays de caracteres debes declararlos con cuatro elementos, los arrays de enteros con dos.

* El numero de elementos en los arrays "city1" y "city2" esta mal, deben tener cuatro elementos (para los tres caracteres mas el '\0').

* Declaras el array "myfli" con cuatro elementos pero solo asignas valores a los primeros tres.

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
ramona98

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Error al comparar cadenas en estructuras
« Respuesta #2 en: 28 Agosto 2013, 09:29 am »

Gracias!

Mis preguntas,
- segun tenia entendido, para los strings era mejor definirlos sin indicar el numero de elementos [], para las estructuras no es igual?

- en los arrays de int siempre hay que definir los elemenots?

_ en las estrucutras, tambien tenemos que definir previamente los elementos? que pasaria si quiero crear tantos elementos como el usuario quiero para "myfli"

gracias y perdonen a un principiante ;)
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Error al comparar cadenas en estructuras
« Respuesta #3 en: 28 Agosto 2013, 10:23 am »

¡Buenas!

Te veo un poco liada. En principio tienes las siguientes formas de declarar un vector:
Código
  1. tipo nombre[tamaño]; //vector sin inicializar
  2. tipo nombre[tamaño] = {valor_1, valor_2, ... , valor_n}; //n < tamaño
  3. tipo nombre[] = {valor_1, valor_2, ... , valor_n}; //vector de n elementos inicializado
  4. tipo *nombre = {valor_1, valor_2, ... , valor_n};
  5. char nombre[tamaño] = "una cadena con menos de tamaño-1 caracteres";
  6. char nombre[] = "la cadena que tu quieras";
  7. char *nombre= "la cadena que tu quieras";
  8.  

Si utilizas un puntero o corchetes sin indicar un tamaño, el tamaño vendrá dado por la longitud de la lista de inicialización o si utilizas una cadena para inicialiar un vector de caracteres, por la longitud de dicha cadena. Si no inicializas el vector en el momento en el que lo declaras, solo tendrás un puntero a alguna parte de la memoria que no sabrás cual es. Si has utilizado la notación de corchetes este puntero no podrá modificarse, por lo que habrás conseguido tener un puntero que no te sirve para nada ( ;D) y si has utilizado la notación de puntero si que podrás apuntar a donde quieras, pero en principio no tendrás ningun valor almacenado ni el puntero apuntara a una zona de memoria en la que puedas almacenar información.

Si utilizas corchetes indicando un tamaño, tendras un conjunto de bytes en memoria donde puedas leer y escribir datos de forma segura, siempre y cuando no te salgas fuera de dicho tamaño. En el caso de las cadenas de caracteres recuerda que tienes un caracter adicional, '\0', que indica donde termina la cadena, por lo que como mucho podrás almacenar tamaño - 1 caracteres.

Si no te queda claro, avisa.

¡Saludos!
« Última modificación: 28 Agosto 2013, 10:26 am por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comparar cadenas sin usar strcmp « 1 2 »
Programación C/C++
Rockmore 12 21,451 Último mensaje 25 Octubre 2010, 07:01 am
por do-while
Intento comparar cadenas [novato] « 1 2 3 »
Programación C/C++
barnix456 20 13,301 Último mensaje 7 Mayo 2012, 20:37 pm
por barnix456
¿Comparar dos cadenas de caracteres en php?
PHP
Netstat89 5 11,095 Último mensaje 1 Octubre 2012, 21:21 pm
por Shell Root
Error al comparar cadenas
Programación C/C++
amchacon 1 2,578 Último mensaje 26 Enero 2013, 15:28 pm
por amchacon
DUDA - Comparar estructuras dentro de arrays (Quiniela)
Programación C/C++
Josogalar 4 2,698 Último mensaje 5 Enero 2014, 12:34 pm
por SoyelRobert
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines