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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error raro en la compilación de este sencillo código.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: Error raro en la compilación de este sencillo código.  (Leído 26,987 veces)
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #20 en: 9 Junio 2013, 13:31 pm »

Se podría cambiar sin problemas, pero eso haría el código más extenso. Aún que está genial saber como se hizo la rueda por si le quieres quitar las llantas y meterle otras más grandes. ;)


En línea

I like to test things.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #21 en: 9 Junio 2013, 13:40 pm »

¿Y sin string, o sea programando nosotros lo que en el fondo hace string?:
Estás limitando la entrada a 19 letras (como le metas 25 te va a dar un desbordamiento de buffer).

Me parece que esto sería más correcto:

Código
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <vector>
  4. using namespace std;
  5. int main()
  6. {
  7.    char valor;
  8.    vector<char> palabra;
  9.    char palabra2[]="qw";
  10.  
  11.    cout << "introduce letras: ";
  12.    valor = getch();
  13.    do
  14.    {
  15.  
  16.        palabra.push_back(valor);
  17.        cout<<valor;
  18.        valor = getch();
  19.    }
  20.    while (valor != '\r'); // Enter
  21.  
  22.    cout<<endl;
  23.  
  24.    palabra.push_back('\0');
  25.    int i;
  26.    for (i=0; palabra[i]!='\0'; i++)
  27.        if (palabra[i]==palabra2[i])
  28.            continue;
  29.    if (i==2)
  30.        cout <<"Hola mundo";
  31.    cin.get();
  32.    return 0;
  33. }
  34.  


« Última modificación: 9 Junio 2013, 13:54 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #22 en: 9 Junio 2013, 15:21 pm »

Estás limitando la entrada a 19 letras (como le metas 25 te va a dar un desbordamiento de buffer).

Me parece que esto sería más correcto:

Código
  1. #include <iostream>
  2. [color=red][size=10pt][b]#include <conio.h>[/b][/size][/color]
  3. [size=10pt][b]#include <vector>[/b][/size]
  4. using namespace std;
  5. int main()
  6. {
  7.   .....................................
  8.  

¡amchcon has hecho uso de la librería conio ..... y de getch!. ¡¡¡¡Dos pecados mortales !!!!! :laugh:

Pues yo, siguiendo los pasos del maestro rir ,hago otra propuesta, eso sí espero que alguien la "pase" a C++  ;) ....a buen entendedor, pocas palabras:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.    char *palabra,*aux,palabra2[]="qw";
  7.    int ch;
  8.    int i=0,j=0;
  9.    palabra = NULL;
  10.    while ((ch = getchar()) != '\n'){
  11.        if ((aux = realloc(palabra, (i + 10) * sizeof *palabra)) == NULL){
  12.            puts("No hay espacio en memoria\n");
  13.            free(palabra);
  14.            return EXIT_FAILURE;
  15.        }
  16.        palabra = aux;
  17.        palabra[i++] = ch;
  18.    }
  19.    palabra[i++] = '\0';
  20.    for (i = 0; palabra[i] != '\0'; i++)
  21.        if (palabra[i] != palabra2[i])
  22.            break;
  23.    if (i==2)
  24.        {puts("Hola mundo\n");}
  25.   return EXIT_SUCCESS;
  26. }
  27.  

Saluditos! .... ..

« Última modificación: 9 Junio 2013, 20:26 pm por leosansan » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #23 en: 9 Junio 2013, 15:44 pm »

¡amchcon has hecho uso de la librería conio ..... y de getch!. ¡¡¡¡Dos pecados mortales !!!!! :laugh:
:silbar: :silbar: :silbar: :silbar:

Tú código está bastante correcto. Lo que mejoraría son los reallocs, en vez de 1 en 1 hazlos de 5 en 5 o de 10 en 10 (El realloc puede ser una operación costosa).

eso sí espero que alguien la "pse" a C++
¡Adelante!  ;-)

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. char* Realloc(char* Puntero,int Original,int Final);
  6.  
  7. const int INTERVALO_REALLOC = 5;
  8.  
  9. int main(void)
  10. {
  11.    char *palabra,*aux,palabra2[]="qw";
  12.    int ch;
  13.    int i=0,j=0;
  14.    int ultimorealloc = 0;
  15.    palabra = NULL;
  16.  
  17.    aux = new char[INTERVALO_REALLOC];
  18.  
  19.    while ((ch = cin.get()) != '\n')
  20.   {
  21.        if ((i-ultimorealloc) == INTERVALO_REALLOC)
  22.        {
  23.            ultimorealloc = i;
  24.  
  25.            if ((aux = Realloc(palabra,i, (i + INTERVALO_REALLOC) * sizeof *palabra)) == NULL){
  26.                cerr<<"No hay espacio en memoria\n";
  27.                delete[] palabra;
  28.                return 1;
  29.            }
  30.  
  31.        }
  32.        palabra = aux;
  33.        palabra[i++] = ch;
  34.    }
  35.    palabra[i++] = '\0';
  36.    cout<<palabra<<endl;
  37.    for (i = 0; palabra[i] != '\0'; i++)
  38.    if (palabra[i] != palabra2[i])
  39.      break;
  40.    if (i==2)
  41.        cout<<"Hola mundo\n";
  42.  
  43.    cout<<palabra;
  44. //cin.get();
  45.   return 0;
  46. }
  47.  
  48.  
  49. char* Realloc(char* Puntero,int Original,int Final)
  50. {
  51.    char* Aux = new(nothrow) char[Final];
  52.  
  53.    if (!Aux)
  54.        return NULL;
  55.  
  56.    for (int i = 0; i < Original;i++)
  57.    {
  58.        Aux[i] = Puntero[i];
  59.    }
  60.  
  61.    delete[] Puntero;
  62.  
  63.    return Aux;
  64. }
« Última modificación: 9 Junio 2013, 16:04 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #24 en: 9 Junio 2013, 16:37 pm »

¿Se os ocurre como hacer que si el texto introducido por teclado lleva un espacio se guarde en otro string?
Que haga algo así:
Código
  1. if (string1 tiene un espacio)
  2. {
  3. guardar hasta el espacio string1;
  4. guardar a partir del espacio hasta el siguiente espacio o final del texto en string2;
  5. if (string2 tiene un espacio)
  6. {
  7. guardar a partir del espacio hasta el siguiente espacio o final del texto en string3;
  8. ........................................................
  9. }
  10. }

Al poner por ejemplo en el programa: "paco gonzalez martinez"
guarde "paco" en string1, "gonzalez" en string2 y "martinez" en string3.

Así podré ejecutar acciones para todos los que sean gonzalez de primer apellido, independientemente de si se llaman paco o tienen de segundo apellido martinez o gonzalez o lo que sea.

Llevo bastante buscando y no encuentro nada que me sirva.
A ver si vosotros sabéis.
Si encuentro algo lo pondré aquí.
Saludos.
En línea

I like to test things.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #25 en: 9 Junio 2013, 16:43 pm »


Duda de novatillo en C++, ¿no sería más simple usar realloc en C++, como yo hice en C. o no se puede?. La verdad es que lo he intentado pero con resultados "insatisfactorios".


Saluditos! .... ..


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #26 en: 9 Junio 2013, 16:57 pm »

Duda de novatillo en C++, ¿no sería más simple usar realloc en C++, como yo hice en C. o no se puede?. La verdad es que lo he intentado pero con resultados "insatisfactorios".


Saluditos! .... ..



El realloc de C funciona claro:

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    char* cosa = new char[3];
  9.    realloc(cosa,50);
  10.  
  11.    for (int i = 0; i < 50;i++)
  12.      cosa[i] = i+48;
  13.  
  14.    cosa[49] = '\0';
  15.  
  16.    cout<<cosa;
  17.    return 0;
  18. }

Pero tu me has dicho C++ puro asi que :S

¿Se os ocurre como hacer que si el texto introducido por teclado lleva un espacio se guarde en otro string?
Que haga algo así:
Código
  1. if (string1 tiene un espacio)
  2. {
  3. guardar hasta el espacio string1;
  4. guardar a partir del espacio hasta el siguiente espacio o final del texto en string2;
  5. if (string2 tiene un espacio)
  6. {
  7. guardar a partir del espacio hasta el siguiente espacio o final del texto en string3;
  8. ........................................................
  9. }
  10. }

Al poner por ejemplo en el programa: "paco gonzalez martinez"
guarde "paco" en string1, "gonzalez" en string2 y "martinez" en string3.

Así podré ejecutar acciones para todos los que sean gonzalez de primer apellido, independientemente de si se llaman paco o tienen de segundo apellido martinez o gonzalez o lo que sea.

Llevo bastante buscando y no encuentro nada que me sirva.
A ver si vosotros sabéis.
Si encuentro algo lo pondré aquí.
Saludos.

Pues:

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    string Nombres[3];
  9.  
  10.    for (int i = 0; i <3;i++)
  11.        cin>>Nombres[i];
  12.  
  13.       for (int i = 0; i <3;i++)
  14.        cout<<Nombres[i]<<endl;
  15.  
  16.    return 0;
  17. }
  18.  

Cuando termines de meter nombres le das a enter y listo :S
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #27 en: 9 Junio 2013, 17:23 pm »

Cita de: rir3760
En el bucle:
Código
  1. for (i=0;palabra[i]!='\0';i++)
  2.   if (palabra[i]==palabra2[i])
  3.      continue;
El condicional no tiene efecto.

tiene efecto, combinado con la línea que le sigue. Fíjate bien en el if con la i, y si no pruébalo
Para explicarlo mejor, el bucle es:
Código
  1. int i;
  2. for (i = 0; palabra[i] != '\0'; i++)
  3.   if (palabra[i] == palabra2[i])
  4.      continue;
  5.  
  6. if (i==2)
  7.   cout <<"Hola mundo";
El cuerpo de este es una sola sentencia, el condicional:
Código
  1. if (palabra[i] == palabra2[i])
  2.   continue;
Si se cumple la condición (los caracteres son iguales) se pasa a la siguiente iteracion del bucle (debido a la sentencia "continue;") y si no se cumple como no hay mas que ejecutar ... también.

En algunas ocasiones utilizas bucles como este:
Código
  1. for (i = 0; palabra[i] != '\0'; i++)
  2.   if (palabra[i] == palabra2[i])
  3.      continue;
  4.   else
  5.      break;
Supongo la intención con el programa (de este tema) es la misma.

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
OmarHack


Desconectado Desconectado

Mensajes: 1.268


Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #28 en: 9 Junio 2013, 17:56 pm »

rir3760, no me enteré de nada. :xD
¿Cuál es la diferencia con el código que puso Amchacon?
PD: Gracias y perdón por mi ignorancia!
En línea

I like to test things.
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Error raro en la compilación de este sencillo código.
« Respuesta #29 en: 9 Junio 2013, 18:01 pm »

Rit estaba contestando a Leo no a ti.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Páginas: 1 2 [3] 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda a resolver este error de compilacion por favor!
Programación C/C++
carles24 2 3,576 Último mensaje 20 Noviembre 2011, 16:22 pm
por satu
Error de compilación en Dev C++ raro
Programación C/C++
Kasswed 9 5,351 Último mensaje 8 Mayo 2012, 00:34 am
por n0z
un codigo para este programa sencillo
Programación General
etaccracker 2 2,541 Último mensaje 29 Marzo 2013, 16:04 pm
por crazykenny
Programa sencillo: ¿Qué significa este error?
Programación C/C++
noob2012 4 4,104 Último mensaje 28 Mayo 2013, 21:41 pm
por elkiy
Qué error tiene este sencillo código? (html - php) « 1 2 »
Desarrollo Web
Danyel_Casvill 13 6,239 Último mensaje 24 Junio 2014, 22:07 pm
por Graphixx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines