|
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í: #include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int sockfd, newsock; int main (int argc, char *argv []) { printf ("Code 0.1 - Dealer 2011\n"); if (argc != 2) { printf ("Use: %s <port>\n\n", argv [0]); return 1; } int cont = 0; struct sockaddr_in client, host; char buffer [1024]; int size=sizeof (client); sockfd=socket (2, 1 , 0); host.sin_family=AF_INET; host. sin_port=htons (atoi (argv [1])); host.sin_addr.s_addr=0; bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr)); listen (sockfd, 1); while (1) { newsock=accept (sockfd, (struct sockaddr*)&client, &size); printf ("Got connection from %s:%d\n", inet_ntoa (client. sin_addr), ntohs (client. sin_port)); do { struct tm *ahora; strftime (buffer , 1024, "%d/%m/%Y %H:%M:%S \n" , ahora ); cont =send (newsock , &buffer , strlen (buffer ), 0); sleep (1); } while (cont == strlen (buffer )); printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client. sin_addr), ntohs (client. sin_port)); close (newsock); } close (sockfd); return 0; }
|
|
|
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: #include <fcntl.h> int main () { int origen=open ("./origen", O_RDONLY), destino=open ("./destino", O_RDWR|O_CREAT|O_TRUNC, 0777); char buffer [15]; read (origen, buffer, 15); write (destino, &buffer, sizeof (buffer)); close (origen); close (destino); return 0; }
|
|
|
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: #include <stdio.h> int main () { lseek (stdin, 0, 0); return 0; }
$ 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. #include <stdio.h> #include <string.h> #define direcc "dicc.txt" #define intentos 7 int main () { printf ("Ah0rcad0 0.2 : Sagrini 2011 : 28/12/2011\n"); printf ("Intenta adivinar la palabra secreta. Animo, tienes 7 intentos!\n"); FILE *fp = fopen (direcc , "r+"); char word [6]; char pista [50]; if (fp == NULL ) { printf ("[!] El archivo %s no existe!\n\n", direcc ); return 1; } { printf ("PISTA: %s\n", pista ); int len = strlen (word ); char palabra [len ], final [len ]; char car ; int cont ; int aciertos = 0, tick ; strncpy (palabra , word , len ); memset (final , '-', len ); final [len ] = '\0'; palabra [len ] = '\0'; while (strcmp (final , palabra ) != 0) { final [0] = palabra [0]; for (cont=0; cont<len; cont++) if (car == palabra [cont]) { final [cont] = car; tick = 1; } if (tick != 1) aciertos++; else tick = 0; while (getchar () != '\n'); printf ("%s (%d fallos)\n", final , aciertos ); if (aciertos >= intentos) break; } if (aciertos >= intentos ) printf ("\nMala suerte, otra vez sera!\n"); else printf ("\nFelicidades! ;) %d fallo/s!\n", aciertos ); } }
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.
|
|
|
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? #include <stdio.h> #include <string.h> int main () { char palabra [7], final [7], car ; int cont ; memset (final , '-', 6); final [6] = '\0'; printf ("Escribe una palabra (lenght -7 chars): "); fgets (palabra , 7, stdin ); palabra [6] = '\0'; while (strcmp (palabra , final ) != 0) { printf ("\nEscribe una letra: "); car =getchar (); // car = fgetc (stdin); for (cont=0; cont<6; cont++) { if (car == palabra [cont]) final [cont] = car; } printf ("%s\n", final ); car = 0; } }
$ ./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! ;) $
|
|
|
|
|
|
|