Autor
|
Tema: Error raro en la compilación de este sencillo código. (Leído 26,799 veces)
|
OmarHack
Desconectado
Mensajes: 1.268
|
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
Mensajes: 1.211
|
¿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: #include <iostream> #include <conio.h> #include <vector> using namespace std; int main() { char valor; vector<char> palabra; char palabra2[]="qw"; cout << "introduce letras: "; valor = getch(); do { palabra.push_back(valor); cout<<valor; valor = getch(); } while (valor != '\r'); // Enter cout<<endl; palabra.push_back('\0'); int i; for (i=0; palabra[i]!='\0'; i++) if (palabra[i]==palabra2[i]) continue; if (i==2) cout <<"Hola mundo"; cin.get(); return 0; }
|
|
« Última modificación: 9 Junio 2013, 13:54 pm por amchacon »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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: #include <iostream> [color=red][size=10pt][b]#include <conio.h>[/b][/size][/color] [size=10pt][b]#include <vector>[/b][/size] using namespace std; int main() { .....................................
¡amchcon has hecho uso de la librería conio ..... y de getch!. ¡¡¡¡Dos pecados mortales !!!!!
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:#include <stdio.h> #include <stdlib.h> int main(void) { char *palabra,*aux,palabra2[]="qw"; int ch; int i=0,j=0; palabra = NULL; while ((ch = getchar()) != '\n'){ if ((aux = realloc(palabra, (i + 10) * sizeof *palabra)) == NULL){ puts("No hay espacio en memoria\n"); free(palabra); return EXIT_FAILURE; } palabra = aux; palabra[i++] = ch; } palabra[i++] = '\0'; for (i = 0; palabra[i] != '\0'; i++) if (palabra[i] != palabra2[i]) break; if (i==2) {puts("Hola mundo\n");} return EXIT_SUCCESS; }
Saluditos! .... ..
|
|
« Última modificación: 9 Junio 2013, 20:26 pm por leosansan »
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
¡amchcon has hecho uso de la librería conio ..... y de getch!. ¡¡¡¡Dos pecados mortales !!!!! 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! #include <iostream> using namespace std; char* Realloc(char* Puntero,int Original,int Final); const int INTERVALO_REALLOC = 5; int main(void) { char *palabra,*aux,palabra2[]="qw"; int ch; int i=0,j=0; int ultimorealloc = 0; palabra = NULL; aux = new char[INTERVALO_REALLOC]; while ((ch = cin.get()) != '\n') { if ((i-ultimorealloc) == INTERVALO_REALLOC) { ultimorealloc = i; if ((aux = Realloc(palabra,i, (i + INTERVALO_REALLOC) * sizeof *palabra)) == NULL){ cerr<<"No hay espacio en memoria\n"; delete[] palabra; return 1; } } palabra = aux; palabra[i++] = ch; } palabra[i++] = '\0'; cout<<palabra<<endl; for (i = 0; palabra[i] != '\0'; i++) if (palabra[i] != palabra2[i]) break; if (i==2) cout<<"Hola mundo\n"; cout<<palabra; //cin.get(); return 0; } char* Realloc(char* Puntero,int Original,int Final) { char* Aux = new(nothrow) char[Final]; if (!Aux) return NULL; for (int i = 0; i < Original;i++) { Aux[i] = Puntero[i]; } delete[] Puntero; return Aux; }
|
|
« Última modificación: 9 Junio 2013, 16:04 pm por amchacon »
|
En línea
|
|
|
|
OmarHack
Desconectado
Mensajes: 1.268
|
¿Se os ocurre como hacer que si el texto introducido por teclado lleva un espacio se guarde en otro string? Que haga algo así: if (string1 tiene un espacio) { guardar hasta el espacio string1; guardar a partir del espacio hasta el siguiente espacio o final del texto en string2; if (string2 tiene un espacio) { guardar a partir del espacio hasta el siguiente espacio o final del texto en string3; ........................................................ } }
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.
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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: #include <iostream> #include <stdlib.h> using namespace std; int main() { char* cosa = new char[3]; realloc(cosa,50); for (int i = 0; i < 50;i++) cosa[i] = i+48; cosa[49] = '\0'; cout<<cosa; return 0; }
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í: if (string1 tiene un espacio) { guardar hasta el espacio string1; guardar a partir del espacio hasta el siguiente espacio o final del texto en string2; if (string2 tiene un espacio) { guardar a partir del espacio hasta el siguiente espacio o final del texto en string3; ........................................................ } }
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: #include <iostream> #include <stdlib.h> using namespace std; int main() { string Nombres[3]; for (int i = 0; i <3;i++) cin>>Nombres[i]; for (int i = 0; i <3;i++) cout<<Nombres[i]<<endl; return 0; }
Cuando termines de meter nombres le das a enter y listo :S
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
En el bucle: for (i=0;palabra[i]!='\0';i++) if (palabra[i]==palabra2[i]) continue;
El condicional no tiene efecto. Sí 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: int i; for (i = 0; palabra[i] != '\0'; i++) if (palabra[i] == palabra2[i]) continue; if (i==2) cout <<"Hola mundo";
El cuerpo de este es una sola sentencia, el condicional: if (palabra[i] == palabra2[i]) 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: for (i = 0; palabra[i] != '\0'; i++) if (palabra[i] == palabra2[i]) continue; else 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
Mensajes: 1.268
|
rir3760, no me enteré de nada. ¿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
Mensajes: 1.211
|
Rit estaba contestando a Leo no a ti.
|
|
|
En línea
|
|
|
|
|
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,541
|
20 Noviembre 2011, 16:22 pm
por satu
|
|
|
Error de compilación en Dev C++ raro
Programación C/C++
|
Kasswed
|
9
|
5,295
|
8 Mayo 2012, 00:34 am
por n0z
|
|
|
un codigo para este programa sencillo
Programación General
|
etaccracker
|
2
|
2,511
|
29 Marzo 2013, 16:04 pm
por crazykenny
|
|
|
Programa sencillo: ¿Qué significa este error?
Programación C/C++
|
noob2012
|
4
|
4,065
|
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,081
|
24 Junio 2014, 22:07 pm
por Graphixx
|
|