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:
#include <stdio.h>
main()
{
printf(" _ _ _ _ ______ _ _ _ \n");
printf("(_) _ (_) (_) _ (_) (______) (_) _ (_) (_)\n");
printf("(_) (_) (_) ___ (_) (_) (_) (_)__ _ _ _ (_)__ _ _ (__)_ (_)\n");
printf("(_) (_) (_) (___) (_) (_) (_) (____) (_)_(_)(_)(____)(_) (_)(_)(_)(_)\n");
printf("(_)_(_)_(_)(_)_(_)(_)_(_)_(_) (_)____ (_) (_)(_) (_)_(_)(_) (__)\n");
printf(" (__) (__) (___) (__) (__) (______)(_) (_)(_)(_) (___) (_) (_)\n");
printf("----------------------------------------------------------\n");
printf("Configurando WoW-ExiruN-Launcher\n");
printf("----------------------------------------------------------\n");
int a,i;
printf("W-E-L te permite crear una lista de realmlist alternativos\n");
printf("de manera que si tu servidor favorito esta off pasara\n");
printf("a los siguientes servidores que hallas indicado\n");
printf("----------------------------------------------------------\n");
printf("Indica el numero de realmlist que quieres poner\n");
scanf("%i", &a);
printf("Introduce los realmlist\n");
for(i=0; i++; i<a) {
char realmlist[30];
fgets (realmlist,30,stdin);
FILE *df;
df = fopen ("Realmlist.wtf","r+b");
fprintf(df,"%s",realmlist);
fclose(df); }
}
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.
http://es.wikipedia.org/wiki/Bucle_for
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 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:
for(inicialización; condición; incremento) {}
Saludos :P
EDITO:
Cita de: 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.
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.
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.
Pon el código exacto que te da el fallo.
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.
Pues es igualito al anterior pero con el orden de los condicionantes del for cambiados:
#include <stdio.h>
main()
{
printf(" _ _ _ _ ______ _ _ _ \n");
printf("(_) _ (_) (_) _ (_) (______) (_) _ (_) (_)\n");
printf("(_) (_) (_) ___ (_) (_) (_) (_)__ _ _ _ (_)__ _ _ (__)_ (_)\n");
printf("(_) (_) (_) (___) (_) (_) (_) (____) (_)_(_)(_)(____)(_) (_)(_)(_)(_)\n");
printf("(_)_(_)_(_)(_)_(_)(_)_(_)_(_) (_)____ (_) (_)(_) (_)_(_)(_) (__)\n");
printf(" (__) (__) (___) (__) (__) (______)(_) (_)(_)(_) (___) (_) (_)\n");
printf("----------------------------------------------------------\n");
printf("Configurando WoW-ExiruN-Launcher\n");
printf("----------------------------------------------------------\n");
int a,i;
printf("W-E-L te permite crear una lista de realmlist alternativos\n");
printf("de manera que si tu servidor favorito esta off pasara\n");
printf("a los siguientes servidores que hallas indicado\n");
printf("----------------------------------------------------------\n");
printf("Indica el numero de realmlist que quieres poner\n");
scanf("%i", &a);
printf("Introduce los realmlist\n");
for(i=0; i<a; i++) {
char realmlist[30];
fgets (realmlist,30,stdin);
FILE *df;
df = fopen ("Realmlist.wtf","a");
fprintf(df,"%s",realmlist);
fclose(df); }
}
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.
char realmlist[30];
FILE *df=fopen ("Realmlist.wtf","w"); //O "a".
for(i=0;i<a;i++)
{
fgets (realmlist,30,stdin);
fprintf(df,"%s",realmlist);
}
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.
Quizás es esto:
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.
.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....
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
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
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:
if (system("ping -w 2 192.168.0.2") == 0);
// hacer ping al siguiente realmlist
if (system("ping -w 2 192.168.0.2") == 1);
//sustituir el realmlist por este
O tengo que
Citarredireccionar la salida a tu programa o hacia algún archivo en pos de poder analizarlo correctamente
Cita de: 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:
if (system("ping -w 2 192.168.0.2") == 0);
// hacer ping al siguiente realmlist
if (system("ping -w 2 192.168.0.2") == 1);
//sustituir el realmlist por este
O tengo que Citarredireccionar 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.
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.
@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.
Citarotra duda a la hora de abrir un archivo puedo indicar una ruta por ejemplo:
Si.
Saludos
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:
FILE *pf
pf = fopen ("C:\\Archivos de programa\World of warcraft\~\realmlist.wtf","w");
Saludos Søra.
Cita de: 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:
FILE *pf
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:
FILE *pf
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:
CitarPD: 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
Cita de: Littlehorse en 22 Mayo 2010, 00:12 AM
CitarPD: 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
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.
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!