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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12
81  Programación / Programación C/C++ / Re: Sobreescribir línea ya escrita lenguaje C en: 30 Diciembre 2011, 11:18 am
Edito: La última solución me parece la mejor y más correcta. Gracias! ;)
82  Foros Generales / Foro Libre / Re: que fue de vertex???????????? en: 30 Diciembre 2011, 11:16 am
Facil, se ha cambiado el nickname. Ahora se llama [Alex] jajaja
83  Programación / Programación C/C++ / Re: Sobreescribir línea ya escrita lenguaje C en: 29 Diciembre 2011, 22:45 pm
No no... Culpa mía, se me ha olvidado concretar. No puedo usar librerías "para Windows" ni funciones "system ()", así como tampoco librerías como "conio.h", etc. La idea es hacerlo con una función estándar y disponible en todos los sistemas (Windows, Linux, Unix-like...).
Alguna idea más? ;)
84  Programación / Programación C/C++ / Re: ¿Socket cerrado? en: 29 Diciembre 2011, 19:37 pm
Yo lo dejaría así:

Código
  1. #include <sys/socket.h>
  2. #include <arpa/inet.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <time.h>
  7.  
  8. int sockfd, newsock;
  9.  
  10. int main (int argc, char *argv [])
  11. {
  12. printf ("Code 0.1 - Dealer 2011\n");
  13. if (argc != 2) { printf ("Use: %s <port>\n\n", argv [0]); return 1; }
  14.  
  15. int cont = 0;
  16. struct sockaddr_in client, host;
  17. char buffer [1024];
  18. int size=sizeof (client);
  19.  
  20. sockfd=socket (2, 1 ,  0);
  21. host.sin_family=AF_INET;
  22. host.sin_port=htons (atoi (argv [1]));
  23. host.sin_addr.s_addr=0;
  24. bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr));
  25. listen (sockfd, 1);
  26.  
  27. while (1)
  28. {
  29. newsock=accept (sockfd, (struct sockaddr*)&client, &size);
  30. printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
  31.  
  32. do
  33. {
  34. time_t now=time (0);
  35. struct tm *ahora;
  36. ahora=localtime ((const time_t*)&now);
  37. strftime (buffer, 1024, "%d/%m/%Y %H:%M:%S \n" , ahora);
  38. buffer [strlen (buffer)] = 0;
  39. cont=send (newsock, &buffer, strlen (buffer), 0);
  40. sleep (1);
  41. } while (cont == strlen (buffer));
  42.  
  43. printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
  44. close (newsock);
  45. }
  46. close (sockfd);
  47. return 0;
  48. }
  49.  
85  Programación / Programación C/C++ / Re: Ayuda con programa en c en: 29 Diciembre 2011, 19:34 pm
Por eso es incorrecto usar "void main ()" y "return 0;", ya que son cosas contradictorias (además, da error al compilar). "int" se debe usar siempre con "main ()", pero para otras funciones no, ya que depende de lo que vaya a retornar. Para finalizar con el tema, te recomiendo leas las chinchetas de la sección, especialmente las de "Cosas que no debes hacer en C/C++". Un saludo ;)

Modif1: NO! void main () y return; no son correctos! Leeos las chinchetas!
Modif2: Eso sí es correcto, yescri.
86  Programación / Programación C/C++ / Re: Extraer PE i pegarlo en otro fichero ¡ayuda! en: 29 Diciembre 2011, 19:09 pm
Trabaja con esto:
Código
  1. #include <fcntl.h>
  2.  
  3. int main ()
  4. {
  5. int origen=open ("./origen", O_RDONLY), destino=open ("./destino", O_RDWR|O_CREAT|O_TRUNC, 0777); char buffer [15];
  6. read (origen, buffer, 15); write (destino, &buffer, sizeof (buffer));
  7. close (origen); close (destino); return 0;
  8. }
  9.  
87  Programación / Programación C/C++ / Sobreescribir línea ya escrita lenguaje C en: 29 Diciembre 2011, 18:57 pm
Buenas! El otro día estaba haciendo un ahorcado en C y pensé que la salida era muy grande. Se me ocurrió escribir "sobre" lo que ya había escrito antes, lo que llegaría a ser lo que hace "apt-get", etc... cuando hacen una barra de progreso. Mi primera idea fue usar lseek (), pero no me dio resultado. Alguna idea? ;) Gracias!

PS: Os dejo una idea de lo que intentaba hacer:
Código
  1. #include <stdio.h>
  2. int main ()
  3. {
  4. printf ("1\n");
  5. printf ("2\n");
  6. lseek (stdin, 0, 0);
  7. printf ("3\n");
  8. return 0;
  9. }
  10.  
Código:
$ gcc -o code code.c
$./code
3
2
$
88  Programación / Programación C/C++ / Re: Duda con ahorcado en C en: 28 Diciembre 2011, 19:51 pm
Ahora queda hacer que dibuje un muñequito jajaja ;) Sólo téneis que compilar y crear un fichero en "/var" llamado "dicc" en el que la primera línea tenga la primera palabra, la segunda la pista, la tercera como la primera... etc.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define direcc "dicc.txt"
  4. #define intentos 7
  5.  
  6. int main ()
  7. {
  8. printf ("Ah0rcad0 0.2 : Sagrini 2011 : 28/12/2011\n");
  9. printf ("Intenta adivinar la palabra secreta. Animo, tienes 7 intentos!\n");
  10.  
  11. FILE *fp = fopen (direcc, "r+"); char word [6]; char pista [50];
  12. if (fp == NULL) { printf ("[!] El archivo %s no existe!\n\n", direcc); return 1; }
  13. while (!feof (fp))
  14. {
  15. printf ("\n---\n");
  16. fgets (word, 6, fp); fgetc (fp);
  17. fgets (pista, 50, fp);
  18. printf ("PISTA: %s\n", pista);
  19. int len = strlen (word); char palabra [len], final [len]; char car; int cont; int aciertos = 0, tick;
  20. strncpy (palabra, word, len); memset (final, '-', len); final [len] = '\0'; palabra [len] = '\0';
  21.  
  22. while (strcmp (final, palabra) != 0)
  23. {
  24. final [0] = palabra [0];
  25. printf ("Escribe una letra: "); car=getchar ();
  26. for (cont=0; cont<len; cont++) if (car == palabra [cont]) { final [cont] = car; tick = 1; }
  27. if (tick != 1) aciertos++;
  28. else tick = 0; while (getchar () != '\n');
  29. printf ("%s (%d fallos)\n", final, aciertos);
  30. if (aciertos >= intentos) break;
  31. }
  32.  
  33. if (aciertos >= intentos) printf ("\nMala suerte, otra vez sera!\n");
  34. else printf ("\nFelicidades! ;) %d fallo/s!\n", aciertos);
  35. }
  36.  
  37. fclose (fp); return 0;
  38. }
  39.  
  40.  
  41.  


Modif: Modifico la línea "if (aciertos >= 5)   printf ("\nMala suerte, otra vez sera!\n");" en donde el 5 debería ser un 7. Esto me ha ocurrido porque al principio el número de intentos al principio era 5, pero luego decidí establecerlo en 7. Podría solucionarse con un "#define" al principio del programa. Esto podría aplicarse también a "/var/dicc". Modifico el código con todas las mejoras aquí descritas. No he probado las mejoras, pero no deberían dar errores. Un saludo.
89  Programación / Programación C/C++ / Re: Fgets para enteros? en: 28 Diciembre 2011, 17:02 pm
Muy bueno! A mi se me habia ocurrido hacer:
Código
  1. while (getchar () != 0) car=getchar ();
pero no era nada efectivo jajaja
90  Programación / Programación C/C++ / Re: Fgets para enteros? en: 28 Diciembre 2011, 13:37 pm
Al usar getchar () o fgetc () (como también scanf () y demás) se "salta" un ciclo sin esperar respuesta del usuario, lo cual me gustaría evitar. ¿Qué hago?

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. {
  6.    char palabra [7], final [7], car; int cont; memset (final, '-', 6); final [6] = '\0';
  7.    printf ("Escribe una palabra (lenght -7 chars): "); fgets (palabra, 7, stdin); palabra [6] = '\0';
  8.  
  9.    while (strcmp (palabra, final) != 0)
  10.    {
  11.            printf ("\nEscribe una letra: "); car=getchar (); // car = fgetc (stdin);
  12.            for (cont=0; cont<6; cont++)    { if (car == palabra [cont]) final [cont] = car; }
  13.            printf ("%s\n", final); car = 0;
  14.    }
  15.  
  16.    printf ("Well done! ;)\n\n"); getchar (); return 0;
  17. }
  18.  
Código:
$ ./code
Escribe una palabra (lenght -7 chars): willix

Escribe una letra: ------

Escribe una letra: w
w-----

Escribe una letra: w-----

Escribe una letra: i
wi--i-

Escribe una letra: wi--i-

Escribe una letra: l
willi-

Escribe una letra: willi-

Escribe una letra: x
willix
Well done! ;)
$
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines