Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Søra en 21 Mayo 2010, 22:42 pm



Título: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 21 Mayo 2010, 22:42 pm
Ola a todos no me suelo pasar mucho por este subforo pero ahora con tanto tiempo libre pues e me ha ocurrido ponerme a programar en C asi pues estoy haciendo un codigo para un servidor de wow una especie de launcher que te permita poner una lista de realmlist ordenados para ir cambiando entre ellos cuando alguno no este on.

Bueno que me enrollo demasiado espero que lo hayais entendido, bueno aqui les dejo mi codigo:

Código
  1. #include <stdio.h>
  2. main()
  3. {
  4.  
  5. printf(" _       _         _       _     ______         _               _     _ \n");
  6. printf("(_)  _  (_)       (_)  _  (_)   (______)       (_) _           (_)   (_)\n");
  7. printf("(_) (_) (_)  ___  (_) (_) (_)   (_)__    _   _  _ (_)__  _   _ (__)_ (_)\n");
  8. printf("(_) (_) (_) (___) (_) (_) (_)   (____)  (_)_(_)(_)(____)(_) (_)(_)(_)(_)\n");
  9. printf("(_)_(_)_(_)(_)_(_)(_)_(_)_(_)   (_)____   (_)  (_)(_)   (_)_(_)(_)  (__)\n");
  10. printf(" (__) (__)  (___)  (__) (__)    (______)(_) (_)(_)(_)    (___) (_)   (_)\n");
  11.  
  12.  
  13. printf("----------------------------------------------------------\n");
  14. printf("Configurando WoW-ExiruN-Launcher\n");
  15. printf("----------------------------------------------------------\n");
  16.  
  17. int a,i;
  18.  
  19. printf("W-E-L te permite crear una lista de realmlist alternativos\n");
  20. printf("de manera que si tu servidor favorito esta off pasara\n");
  21. printf("a los siguientes servidores que hallas indicado\n");
  22. printf("----------------------------------------------------------\n");
  23. printf("Indica el numero de realmlist que quieres poner\n");
  24. scanf("%i", &a);
  25. printf("Introduce los realmlist\n");
  26.  
  27.    for(i=0; i++; i<a) {
  28.      char realmlist[30];
  29.      fgets (realmlist,30,stdin);
  30.      FILE *df;
  31.      df = fopen ("Realmlist.wtf","r+b");
  32.      fprintf(df,"%s",realmlist);
  33.      fclose(df); }
  34.  
  35. }

la cosa es que no me ejecuta el for por lo que no puedo guardar los realmlist y no funciona mi programa.

Y despues de todo esto deciros que no he encontrado ninguna manera de borrar archivos o reescribirlos en C lo cual frena mi programa.

Saludos Søra.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: bizco en 21 Mayo 2010, 22:46 pm
http://es.wikipedia.org/wiki/Bucle_for


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 21 Mayo 2010, 22:52 pm
Conozco el funcionamiento del for XD pero gracias.

Lo que pasa es que ya lo he usado antes y tengo otros codigos mios que funcionan para comparar pero sin embargo me funcionan en los otros codigos y ene ste no.... o.O


Saludos Søra.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Horricreu en 21 Mayo 2010, 22:55 pm
No me creo que sepas abrir ficheros en C/C++ y que no sepas utilizar un for() :o Como dijo ctlon, mírate esto o coge un buen libro y lee. Mientras tanto te aviso que el bucle for() se utiliza de la siguiente manera:

Código
  1. for(inicialización; condición; incremento) {}

Saludos :P

EDITO:

Conozco el funcionamiento del for XD pero gracias.

Lo que pasa es que ya lo he usado antes y tengo otros codigos mios que funcionan para comparar pero sin embargo me funcionan en los otros codigos y ene ste no.... o.O


Saludos Søra.

No me lo creo. Es imposible que te haya funcionado en otros códigos... enséñanoslos.

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 21 Mayo 2010, 23:00 pm
Tienes razon eso lo ponia en la wiki y cuando lo he leido lo he cambiado y me da un fallo de segmentacion asi que como me daba fallo pues ya no os he dicho que lo habia cambiado ya que no sabia que el orden fuera imprescindible  '-.- Gracias pero ahora me da esto:

Citar
~/Escritorio/C$ ./a.out
 _          _               _       _     ______            _                      _     _
(_)   _    (_)          (_)  _  (_)   (______)         (_) _                (_)   (_)
(_)  (_)  (_)  ___   (_) (_) (_)   (_)__    _   _  _     (_)__  _   _ (__)_ (_)
(_)  (_)  (_) (___)  (_) (_) (_)   (____)  (_)_(_)(_)(____)(_) (_)(_)(_)(_)
(_)_(_)_(_)(_)_(_) (_)_(_)_(_)   (_)____   (_)  (_)(_)    (_)_(_)(_)  (__)
 (__) (__)    (___)   (__) (__)    (______)(_) (_)(_)(_)    (___) (_)   (_)
----------------------------------------------------------
Configurando WoW-ExiruN-Launcher
----------------------------------------------------------
W-E-L te permite crear una lista de realmlist alternativos
de manera que si tu servidor favorito esta off pasara
a los siguientes servidores que hallas indicado
----------------------------------------------------------
Indica el numero de realmlist que quieres poner
2
Introduce los realmlist
Fallo de segmentación

Saludos Søra.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Littlehorse en 21 Mayo 2010, 23:07 pm
Pon el código exacto que te da el fallo.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: bizco en 21 Mayo 2010, 23:08 pm
Citar
    "r"   Open a file for reading. The file must exist.
    "w"   Create an empty file for writing. If a file with the same name already exists its content is erased and the file is treated as a new empty file.
    "a"   Append to a file. Writing operations append data at the end of the file. The file is created if it does not exist.
    "r+"   Open a file for update both reading and writing. The file must exist.
    "w+"   Create an empty file for both reading and writing. If a file with the same name already exists its content is erased and the file is treated as a new empty file.
    "a+"   Open a file for reading and appending. All writing operations are performed at the end of the file, protecting the previous content to be overwritten. You can reposition (fseek, rewind) the internal pointer to anywhere in the file for reading, but writing operations will move it back to the end of file. The file is created if it does not exist.



Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 21 Mayo 2010, 23:13 pm
Pues es igualito al anterior pero con el orden de los condicionantes del for cambiados:

Código
  1. #include <stdio.h>
  2. main()
  3. {
  4. printf(" _       _         _       _     ______         _               _     _ \n");
  5. printf("(_)  _  (_)       (_)  _  (_)   (______)       (_) _           (_)   (_)\n");
  6. printf("(_) (_) (_)  ___  (_) (_) (_)   (_)__    _   _  _ (_)__  _   _ (__)_ (_)\n");
  7. printf("(_) (_) (_) (___) (_) (_) (_)   (____)  (_)_(_)(_)(____)(_) (_)(_)(_)(_)\n");
  8. printf("(_)_(_)_(_)(_)_(_)(_)_(_)_(_)   (_)____   (_)  (_)(_)   (_)_(_)(_)  (__)\n");
  9. printf(" (__) (__)  (___)  (__) (__)    (______)(_) (_)(_)(_)    (___) (_)   (_)\n");
  10.  
  11.  
  12. printf("----------------------------------------------------------\n");
  13. printf("Configurando WoW-ExiruN-Launcher\n");
  14. printf("----------------------------------------------------------\n");
  15.  
  16. int a,i;
  17.  
  18. printf("W-E-L te permite crear una lista de realmlist alternativos\n");
  19. printf("de manera que si tu servidor favorito esta off pasara\n");
  20. printf("a los siguientes servidores que hallas indicado\n");
  21. printf("----------------------------------------------------------\n");
  22. printf("Indica el numero de realmlist que quieres poner\n");
  23. scanf("%i", &a);
  24. printf("Introduce los realmlist\n");
  25.  
  26.    for(i=0; i<a; i++) {
  27.      char realmlist[30];
  28.      fgets (realmlist,30,stdin);
  29.      FILE *df;
  30.      df = fopen ("Realmlist.wtf","a");
  31.      fprintf(df,"%s",realmlist);
  32.      fclose(df); }
  33.  
  34. }
  35.  

Saludos Søra.

edito: Solucionada la primera parte tal y como a publicado ctlon habia copiado la manera de abrir archivos de un codigo que habia creado anteriormente por no repasar y ay estaba el fallo pero ahora al poner que quiero meter dos realmlist solo me deja meter uno no se por que quizas por el espacio ????

Citar
~/Escritorio/C$ ./a.out
 _       _         _       _     ______         _               _     _
(_)  _  (_)       (_)  _  (_)   (______)       (_) _           (_)   (_)
(_) (_) (_)  ___  (_) (_) (_)   (_)__    _   _  _ (_)__  _   _ (__)_ (_)
(_) (_) (_) (___) (_) (_) (_)   (____)  (_)_(_)(_)(____)(_) (_)(_)(_)(_)
(_)_(_)_(_)(_)_(_)(_)_(_)_(_)   (_)____   (_)  (_)(_)   (_)_(_)(_)  (__)
 (__) (__)  (___)  (__) (__)    (______)(_) (_)(_)(_)    (___) (_)   (_)
----------------------------------------------------------
Configurando WoW-ExiruN-Launcher
----------------------------------------------------------
W-E-L te permite crear una lista de realmlist alternativos
de manera que si tu servidor favorito esta off pasara
a los siguientes servidores que hallas indicado
----------------------------------------------------------
Indica el numero de realmlist que quieres poner
2
Introduce los realmlist
set realmlist exirun.servegame.com

Saludos Søra.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Littlehorse en 21 Mayo 2010, 23:18 pm
Código
  1. char realmlist[30];
  2. FILE *df=fopen ("Realmlist.wtf","w"); //O "a".
  3. for(i=0;i<a;i++)
  4. {
  5. fgets (realmlist,30,stdin);
  6. fprintf(df,"%s",realmlist);
  7. }
  8. fclose(df);

Edit: "set realmlist exirun.servegame.com" son 34 caracteres, tu cadena tiene 30. El contenido restante queda en el buffer de entrada y es leído en la próxima lectura.



Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Horricreu en 21 Mayo 2010, 23:20 pm
Quizás es esto:

Código
  1. df = fopen ("Realmlist.wtf","a");

¿Cómo vas a abrir un fichero con extensión .wtf :laugh: :xD? ¿No será un .doc o .txt? Porque poner .wtf me entra la risa... :laugh:

Saludos :P

EDITO: ¡he estado buscando y, existe la extensión .wtf! :laugh: Perdona es que ya sabes: what the fuck :xD

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 21 Mayo 2010, 23:29 pm
.wtf es la extension que tiene el realmlist del world of warcraft. Muchas gracias littlehorse lcon eso ya me has solucionado medio proyecto pero aun asi como ya e escrito no cosigo introducir varios realmlist en el archivo para luego cojerlos cuando los necesite y meterlos en el realmlist de verdad.

A demas otra duda desde C se puede hacer un ping porque lo necesitaria(en google no sale nada).

Uso linux asi que la biblioteca esa que ace que se acepten comandos de msdos no creo que funcione y este codigo:

if (0 == system("ping -w 2 192.168.0.2))

no se si es solo para C++ o solo para C.


Saludos Søra.

edito: He leido que se puede acer mandando paquetes ICMP pero ese metodo me parece muy costoso si hubiera alguno mas rapido....


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Horricreu en 21 Mayo 2010, 23:36 pm
Gracias por la aclaración, pero ten en cuenta que los comandos de la función system() (http://www.cplusplus.com/reference/clibrary/cstdlib/system/) pueden no funcionar en algún SO ;)

Saludos :P


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Littlehorse en 21 Mayo 2010, 23:43 pm
Eso debería funcionar perfectamente siempre y cuando el tamaño de la cadena sea el máximo posible y tengas en cuenta los saltos de linea que fgets toma como validos y asegurarte que las cadenas estén finalizadas con un NULL.
En caso que quede contenido restante en el buffer, hay un post sobre ello unas lineas mas abajo.

Puedes hacer un ping de esa forma, pero obviamente tendrás que o bien redireccionar la salida a tu programa o hacia algún archivo en pos de poder analizarlo correctamente.
Y si, podes usar sockets también, pero supongo que no te vas a tomar el trabajo de aprenderlos para hacer un launcher.
Obviamente si pretendes hacer el ping de esa forma es conveniente utilizar un buffer (system(buff)) y ese buffer formatearlo previamente con tu comando y con el parámetro de dicho comando. sprintf (http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/) por ejemplo.

Usa el buscador que hay información sobre todo lo que necesitas.

Saludos




Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 21 Mayo 2010, 23:48 pm
Littlehorse en serio necesito hacer todo eso lo que yo quiro es si el servidor responde al ping pues se pone ese realmlist si no se comprueba el siguiente algo como:

Código
  1. if (system("ping -w 2 192.168.0.2") == 0);
  2. // hacer ping al siguiente realmlist
  3. if (system("ping -w 2 192.168.0.2") == 1);
  4. //sustituir el realmlist por este

O tengo que
Citar
redireccionar la salida a tu programa o hacia algún archivo en pos de poder analizarlo correctamente




Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Horricreu en 21 Mayo 2010, 23:51 pm
Littlehorse en serio necesito hacer todo eso lo que yo quiro es si el servidor responde al ping pues se pone ese realmlist si no se comprueba el siguiente algo como:

Código
  1. if (system("ping -w 2 192.168.0.2") == 0);
  2. // hacer ping al siguiente realmlist
  3. if (system("ping -w 2 192.168.0.2") == 1);
  4. //sustituir el realmlist por este

O tengo que
Citar
redireccionar la salida a tu programa o hacia algún archivo en pos de poder analizarlo correctamente




Te falta cerrar el primer if() correctamente :silbar:

Saludos :P

PD: mientras vosotros dos tenéis esta charla, yo voy dando consejos prácticos como el mensaje de antes y este. Que no se me ignore, que no lo digo en broma.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 21 Mayo 2010, 23:54 pm
No te ignoroo!!! solo que como tus comentarios son practicos cuando veo mi fallo aplico tu solucion y sigo es mas agradezco tus aportes tanto como los de littlehorse  :)

Saludos Søra.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Littlehorse en 21 Mayo 2010, 23:58 pm
@Søra

Citar
Cuando te refieres a existir quieres decir que esta encendido el servidor no? que responde al ping?

Claro, pero es el único dato que obtendrás. También ten en cuenta que devolverá 0 en caso que el host exista pero devolverá un valor distinto de 0 en caso contrario, lo cual no siempre sera 1. Arreglado eso funcionaria en la mayoría de los sistemas pero por supuesto no es una solución estrictamente portable ni la mas adecuada, pero seguramente es la mas rápida.

Igualmente lo del buffer para system tendrás que hacerlo si o si en caso que quieras hacer ping en múltiples host obtenidos desde el usuario.

Citar
otra duda a la hora de abrir un archivo puedo indicar una ruta por ejemplo:

Si.

Saludos


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 22 Mayo 2010, 00:02 am
Cuando te refieres a existir quieres decir que esta encendido el servidor no? que responde al ping?

otra duda a la hora de abrir un archivo puedo indicar una ruta por ejemplo:

Código
  1. FILE *pf
  2. pf = fopen ("C:\\Archivos de programa\World of warcraft\~\realmlist.wtf","w");

Saludos Søra.




Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Horricreu en 22 Mayo 2010, 00:07 am
Cuando te refieres a existir quieres decir que esta encendido el servidor no? que responde al ping?

otra duda a la hora de abrir un archivo puedo indicar una ruta por ejemplo:

Código
  1. FILE *pf
  2. pf = fopen ("C:\\Archivos de programa\World of warcraft\~\realmlist.wtf","w");

Saludos Søra.




Vuelvo otra vez :xD Está mal, en C/C++ si quieres escribir una barra inversa, debes escribir dos barras inversas y, no lo haces bien:

Código
  1. FILE *pf
  2. pf = fopen ("C:\\Archivos de programa\\World of warcraft\\~\\realmlist.wtf","w");

Saludos :P

PD: no se si se puede escribir espacios dentro de una ruta de fichero en este caso :huh:


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Littlehorse en 22 Mayo 2010, 00:12 am
Citar
PD: no se si se puede escribir espacios dentro de una ruta de fichero en este caso  :huh:

Si, se puede. Y también se puede usar /.

Saludos


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Horricreu en 22 Mayo 2010, 00:14 am
Citar
PD: no se si se puede escribir espacios dentro de una ruta de fichero en este caso  :huh:

Si, se puede. Y también se puede usar /.

Saludos

Gracias, no lo sabía ;)

Saludos :P


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Søra en 22 Mayo 2010, 00:17 am
Bueno unas ultimas dudas antes de desconectarme:

entonces al principio de la ruta que son dos barras inversas:

C:\\

en C que tengo que poner:

C:\\\\

??? suena un poco tonto pero vamos por asegurar.


y por ultimo abrir paginas webs desde un programa en C, porque en google e visto solo preguntas sin respuestas.... acordaos linux user no windows api's...

Saludos Søra.


Título: Re: Ayuda con codigo en C (no me ejecuta un for y necesito ayuda)
Publicado por: Littlehorse en 22 Mayo 2010, 00:22 am
C:\\ruta\\file
C:/ruta/file

Cualquiera de las dos es valida.

Para lo otro usa el buscador (http://tinyurl.com/2bkar7r) o el buscador (http://tinyurl.com/2cz92xt) o haz un nuevo post al respecto. Este post se esta extendiendo demasiado con preguntas que pueden solucionarse fácilmente con una mínima búsqueda.

Saludos!