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

 

 


Tema destacado: Tutorial básico de Quickjs


  Mostrar Mensajes
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ... 231
441  Programación / Programación C/C++ / socket siempre me devuelve -1 (Solucionado) en: 27 Noviembre 2018, 03:57 am
Hola a todos anteriormente ya habia trabajado con sockets en C, sin embargo no estoy seguro si es mi Computadora actual la del problema:

Código
  1. #include<winsock2.h>
  2. #include<stdio.h>
  3.  
  4. int main() {
  5. int s;
  6. if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  7. printf("Valor %i\n",s);
  8. perror("socket");
  9.        return 1;
  10. }
  11. }
  12.  

En mi caso al compilar y ejecutar el codigo anterior siempre me devuelve menos -1

Código:
C:\> gcc -o test.exe test.c -lws2_32
C:\> test.exe
Valor -1
socket: No error

El codigo original es mas extenso, pero incluso con ese fragmento basico de codigo me devulve error...

Version de gcc
Código:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --target=mingw32 --with-gmp=/mingw --with-mpfr --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --with-arch=i586 --with-tune=generic --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --enable-libgomp --disable-libvtv --enable-nls
Thread model: win32
gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)

Voy a tratar de actualizar el mingw

Saludos
442  Programación / Programación C/C++ / Re: Problema con la Restricción de Edad hecha con If-Else y Struct en: 27 Noviembre 2018, 00:37 am
En ningun momento capturas el "regis" de main, solo capturas uno en Registro, pero ese pertenece a esa funcion y dicha variable deja de "existir" al momento que vuelve a la funcion main.

Saludos.

PD, no uses CONIO, no es Standar

En su lugar usa  getchar () de la stdio.h
443  Programación / Programación C/C++ / Re: Necesito ayuda con mi código marca errores que no comprendo en: 26 Noviembre 2018, 07:20 am
Fancy:

Citar
elaborate in structure or decoration. "the furniture was very fancy"

El punto es por que adornar el programa con borrados de pantalla y demas cosas si apenas estas aprendiendo lo basico. Mi recomendacion es que de momento quites todos esos systems("cls") que ademas solo funcionan en windows. Y te concentres en pequeños ejemplos, como paso de parametros a funciones, paso de valores por referencia, apuntadores y cosas basicas.

Saludos!
444  Programación / Programación C/C++ / Re: Necesito ayuda con mi código marca errores que no comprendo en: 26 Noviembre 2018, 06:26 am
Citar
   main.c:87:26: warning: passing argument 2 of ganador1 makes pointer from integer without a cast [-Wint-conversion]
    ganador=ganador1(ganador,tablero1[j]);
                              ^
    main.c:4:9: note: expected int (*)[7] but argument is of type int
         int ganador1(int n,int tablero[6][7]);

Es un warning no es un error te avisa de que algo no esta bien, y realmente no lo esta.

Código:
tablero1[i][j]

Es un solo numero Entero, aque que esta en la posicion [j], pero la funcion quiere recibir todo el arreglo. Para corregir esto deberias de cambiar o la funcion  o lo  que le estes mandando a la funcion.

Ejemplo mandandole toda el arreglode numeros a la funcion ganandor1, y no solo un solo valor entero.

Código:
ganador=ganador1(ganador,tablero1);

Citar
    prinft("El jugador 1 es el que gana");

Es printf lo escribiste mal

Citar
   main.c:136:30: warning: passing argument 2 of ganador2 makes pointer from integer without a cast [-Wint-conversion]
     validacion2=ganador2(ganador,tablero1[j]);
                                  ^
    main.c:5:9: note: expected int (*)[7] but argument is of type int
         int ganador2(int n,int tablero[6][7]);
             ^

Mismo error del primero


Citar
        system("cls");

No uses SYSTEM solo para borrar la Pu74 pantalla, en lugar de usar funciones fancy para borrra la pantalla, deberias de aprender a programar y quitarle los adornos al programa.

Citar
    ^
    main.c:18:1: warning: ignoring return value of scanf, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i",&opciones);
     ^
    main.c:23:5: warning: ignoring return value of system, declared with attribute warn_unused_result [-Wunused-result]
         system("cls");
         ^
    main.c:54:1: warning: ignoring return value of scanf, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i",&jugador1);
     ^
    main.c:93:1: warning: ignoring return value of system, declared with attribute warn_unused_result [-Wunused-result]
     system("cls");
     ^
    main.c:103:1: warning: ignoring return value of scanf, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i",&jugador2);
     ^
    main.c:142:1: warning: ignoring return value of system, declared with attribute warn_unused_result [-Wunused-result]
     system("cls");
     ^
    main.c:155:1: warning: ignoring return value of scanf, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i",&volverajugar);
     ^
    /var/tmp/ccOyAiBU.o: In function `main':
    main.c:(.text.startup+0xb0): undefined reference to `prinft'
    main.c:(.text.startup+0x503): undefined reference to `prinft'
    collect2: error: ld returned 1 exit status

Puedes omitir todos los errores del Scanf son simples warning.

Saludos
445  Programación / Programación C/C++ / Re: Obtener StackTrace? en: 25 Noviembre 2018, 14:16 pm
Si ese es el caso deberias de usar criptografia para tener la certeza, medianta  algun sistema de clave publica, clave privida.

Saludos
446  Programación / Programación C/C++ / Re: Duda cstdlib y srand (C++) en: 25 Noviembre 2018, 08:11 am
A mi me da error:

Código:
C:\codigos>g++ -o t.exe t.cpp
t.cpp: In function 'int main()':
t.cpp:12:21: error: 'time' was not declared in this scope
      srand(time(NULL));

C:\codigos>g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/6.3.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-6.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --with-gmp=/mingw --with-mpfr=/mingw --with-mpc=/mingw --with-isl=/mingw --prefix=/mingw --disable-win32-registry --target=mingw32 --with-arch=i586 --enable-languages=c,c++,objc,obj-c++,fortran,ada --with-pkgversion='MinGW.org GCC-6.3.0-1' --enable-static --enable-shared --enable-threads --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --with-libiconv-prefix=/mingw --with-libintl-prefix=/mingw --enable-libstdcxx-debug --with-tune=generic --enable-libgomp --disable-libvtv --enable-nls
Thread model: win32
gcc version 6.3.0 (MinGW.org GCC-6.3.0-1)

A de ser algo de tu compilador que la incluye, alguna vez me paso algo similar que sin incluir explícitamente en biblioteca de funciones, el compilador no marcaba errores y generaba el exe sin problemas.

Saludos
447  Programación / Programación C/C++ / Archivar directorio completo en un solo archivo. en: 25 Noviembre 2018, 07:06 am
Realice un programa que pueda recibir parámetros desde la linea de comandos, dicho programa recibirá un directorio en el disco duro o un archivo

Si es Directorio..
  • Comprobar que el directorio sea valido.
  • Comprobar que sea distinto al directorio actual.
  • Listar los archivos y pesos en bytes en el directorio mencionado.
  • Realizar una copia de seguridad de dichos archivos, con las siguientes características
  • Todos lo archivos del directorio se deben de guardar en un unico archivo llamado directorio.dir donde directorio se debe sustituir por el nombre  del directo indicado en primer lugar. Ejemplo "C:\temp\codigos\" el archivo se debe de llamar codigos.dir
  • Se debera de tener un registro  también en archivo (index.dat), que contenga Nombre, donde comienza y cuando espacio ocupa cada archivo del directorio en el nuevo.
  • Se debera realizar también una validación tipo checkum de cada archivo, utilice el sistema Hash de su preferencia para hacer esta validación.


Si es archivo, deberá de ser alguno en terminación .dir
  • Comprobar que exista
  • Que este completo segun la lista de archivos que previamente guardamos en el index.dat
  • Debera de Extraerlo en un directorio indicado por el usuario (En un segundo parametro al programa) distinto al directorio Original.

El programa podrá ser creado en C o C++

Deberá de utilizar en cualquier momento la menor cantidad de memoria posible y ser lo bastante rápido para pode competir con otros.

El post es solo para darle un poco mas de movimiento a este subforo de programación en C/C++.

Si tienen dudas sobre una parte en especifico, pueden de preferencia abrir un nuevo tema, con la duda en especifico.

Si alguno quiere participar comentelo aqui, asi mismo también pueden sugerir mas features para el programa. Ya que opciones hay varias.

La intención no es reinventar la rueda, programas similares ya existen Tipo (TAR), la intención es que quien este aprendiendo C o C++ pueda retarse asi mismo con algo que en un futuro pueda reutilizar. Y no se diga la experiencia.

Saludos
448  Programación / Programación C/C++ / Re: ¿Queda algo en el Buffer de Entrada stdin? en: 25 Noviembre 2018, 00:02 am
A raíz de este post me he puesto a pensar en todo esto.
Ya que C viene del UNIX y en UNIX todo son archivos y por tanto stdin es un archivo ¿qué tal si llevamos el puntero de stdin hasta el final y nos saltamos todo lo que hay dentro?

Incluso acepta una única pulsación de intro.

 ;-) ;-)

No habia intentado eso, pero funciona muy bien!, yo intente con la funcion feof para tratar de determinar si estabamos en el final del archivo, pero no funciono para STDIN.

Con fseek si funciona!!!

Código
  1. #include<stdio.h>
  2.  
  3. int main() {
  4. char temporal[10];
  5. printf("Ingrese una cadena: ");
  6. fgets(temporal,10,stdin);
  7. printf("Cadena Leida: %s\n",temporal);
  8. fseek(stdin, 0, SEEK_END);
  9. printf("Ingrese otra cadena: ");
  10. fgets(temporal,10,stdin);
  11. printf("Cadena Leida: %s\n",temporal);
  12. }
  13.  




Saludos!
449  Programación / Programación C/C++ / Re: ¿Queda algo en el Buffer de Entrada stdin? en: 24 Noviembre 2018, 22:16 pm
Realmente no importa lo que queda en el buffer. Ya que si vaciamos el buffer de stdin no se volvera a llenar hasta que volvamos a llamar a una funcion tipo fgets, gets, scanf... etc.

Ejemplo:

Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int main() {
  5. int len,i = 0;
  6. char temporal[10];
  7. char c;
  8. printf("Ingrese una cadena: ");
  9. fgets(temporal,10,stdin);
  10. printf("Cadena Leida: %s\n",temporal);
  11. len = strlen(temporal);
  12. if(temporal[len - 1 ]  != 0xA) {
  13. while ((c = getchar()) != 0xA);
  14. }
  15. printf("Ingrese otra cadena: ");
  16. fgets(temporal,10,stdin);
  17. printf("Cadena Leida: %s\n",temporal);
  18. }
  19.  

Salida:



Saludos
450  Programación / Programación C/C++ / Re: ¿Queda algo en el Buffer de Entrada stdin? en: 24 Noviembre 2018, 21:50 pm
Tengo que decirles que después de meditarlo un poco, encontre la solución, se puede deducir leyendo la memoria que acabamos de leer, esto en el caso de Usar Fgets  ;-) ;-)

Si bien han usado en su momento fgets, recordaran que este guarda en la misma cadena que acaba de leer el "Enter" esto es un byte de valor 0xA (10 en decimal)

Esto siempre y cuando la longitud del texto leído no supere el tamaño del arreglo donde vamos a guardar nuestra cadena leida.

Vemos un ejemplo con Codigo:

Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int main() {
  5. int len,i = 0;
  6. char temporal[10];
  7. printf("Ingrese una cadena: ");
  8. fgets(temporal,10,stdin);
  9. len = strlen(temporal);
  10. printf("Cadena Leida: %s",temporal);
  11. printf("La longitud de la cadena leida es de %i\n",len);
  12. while(i<10) printf("%.2X",temporal[i++]);
  13. printf("\n");
  14. }
  15.  
  16.  

Aqui unas cuantas salidas.



1er caso de la imagen: ingresar mas de 9 letras "A", obvio hay datos en el buffer de stdin esperando ser leeidos,
2do caso de la imagen: Al ingresar exactamente 9 letras A, el ultimo byte del buffer el byte 10 es el valor nulo '\0' En este caso queda un Enter en el buffer de datos de stdin
3er caso de la imagen: Al ingresar exactamente 8 letras A, strlen sigue considerando 9 espacios usados ya que el Enter (0xA) esta el la posición temporal[8] y en temporal[9] esta el byte nulo '\0'
4to caso de la imagen: Al ingresar exactamente 7 letras A, strlen marca una longitud de 8 espacios mismo caso que el anterior sigue considerando el "Enter" como un valor valido de la cadena.

En conclusión, si al usar fgets correctamente, el valor de nuestro arreglo en su posición strlen(temporal) - 1 es igual 0xA entonces no queda nada en nuestro buffer de STDIN, en caso contrario si queda Algo, ya sea solo el Enter o Texto restante + Enter.

En cualquier caso después de realizar esta evaluación si detectamos el caso de que aun quede buffer pendiente por leer, podemos leerlo asi:

Código
  1. while ((c = getchar()) != 0xA);


Saludos
Páginas: 1 ... 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 [45] 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 ... 231
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines