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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


  Mostrar Mensajes
Páginas: 1 ... 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 [161]
1601  Programación / Programación C/C++ / Re: AYUDA! Polinomios de segundo grado en: 8 Diciembre 2015, 23:09 pm
La cosa es que planteas el problema, muestras lo que tienes realizado hasta el momento y especificas dónde te has quedado trabado.
La gente te va a resolver dudas puntuales, no a hacer la tarea.  :¬¬
1602  Programación / Programación C/C++ / Re: ayuda con strncpy y archivo. en: 5 Diciembre 2015, 19:57 pm
Muy buenas.

Para resolver tu problema lo que podrías hacer es leer el archivo línea a línea con fgets y, sobre la cadena adquirida, usar la función strtok con el separador + para recoger cada subcadena.
1603  Programación / Programación C/C++ / Re: Validación de datos con Do while y condicionales en función C++ en: 5 Diciembre 2015, 19:29 pm
Muy buenas.

Pues bien, hay varias cosas que te fallan en el código, a saber:

1. Llamas a la función con los argumentos a, b, c y d; pero dentro de ella les das unos valores nuevos que, por otra parte, son locales de la función, no podrás saber que has guardado fuera de ella. Por tanto:
1.1. Llama a la función sin argumentos y declaras dentro de ella las cuatro variables. O
1.2. Haz que los argumentos sean punteros o referencias, entonces los valores que les des dentro de la función serán los que verás en esas mismas variables cuándo ésta regrese.

2. Dentro de la función la lógica está mal planteada: después de pedir las variables hay una cadena que pide al usuario que vuelva a introducir los datos, estén estos bien o no. Eso debería formar parte de la parte del tratamiento de error. Puedes:
2.1. Usar un if para saber si los datos introducidos son correctos, lo que tienes dentro de while. Si falla pon n2 e informa al usuario de que ha habido un fallo. Dentro del while mira si n2==0 para repetir el bucle en caso afirmativo.

3. Regresas un dato con n2 al término de la función pero, contrariamente a tu planteamiento, a juzgar por el código de main, n2 no regresa los cuatro números sino que siempre te retornará 0. Por otra parte una vez que has hecho que una función devuelva el control con return todo código que haya escrito después de esta instrucción es código que no se va a ejecutar. Puedes:
3.1. Hacer que la instrucción no devuelva nada y, junto a lo dicho en el punto 1.2. la función main recibirá los resultados en la variables usadas como argumentos de llamada. O
3.2. Hacer que la función devuelva un puntero a entero y llamarla sin argumentos. Mediante la memoria dinámica creas un array que llenarás con los cuatro números y eso será lo que devolverá la función. En main recogerás ese puntero a una variable puntero local.
1604  Programación / Programación C/C++ / Un programa que muestra donde el S.O. pone cada cosa. en: 3 Diciembre 2015, 21:44 pm
No es mucha cosa, solo un divertimento; pero sirve para ver en qué parte de la memoria pone el S.O. las funciones, las variables locales, las globales y las dinámicas.
Así se puede ver como el sistema separa la memoria de código, la memoria de pila (stack) y la memoria del montón (heap).

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. char gc;
  5. int gi;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. char c;
  10. int i;
  11. int *p = malloc(sizeof(int));
  12. printf("printf\t= %p\n", &printf);
  13. printf("malloc\t= %p\n", &malloc);
  14. printf("main\t= %p\n", &main);
  15. printf("\n");
  16. printf("gi\t= %p\n", &gi);
  17. printf("gc\t= %p\n", &gc);
  18. printf("\n");
  19. printf("argv\t= %p\n", &argv);
  20. printf("argc\t= %p\n", &argc);
  21. printf("\n");
  22. printf("c\t= %p\n", &c);
  23. printf("i\t= %p\n", &i);
  24. printf("p\t= %p\n", &p);
  25. printf("\n");
  26. for(i = 0; i < argc; ++i)
  27. printf("argv[%i]\t= %p -- %s$\n", i, argv[i], argv[i]);
  28. printf("\n");
  29. printf("p (->)\t= %p\n", p);
  30. free(p);
  31. return 0;
  32. }

P. ej.:

$ ./c 1 12 123 1234 12345
printf   = 0x4004f0
malloc   = 0x400520
main   = 0x40061d

gi   = 0x60105c
gc   = 0x601060

argv   = 0x7ffd71212400
argc   = 0x7ffd7121240c

c   = 0x7ffd71212413
i   = 0x7ffd71212414
p   = 0x7ffd71212418

argv[0]   = 0x7ffd71214551 -- ./c$
argv[1]   = 0x7ffd71214555 -- 1$
argv[2]   = 0x7ffd71214557 -- 12$
argv[3]   = 0x7ffd7121455a -- 123$
argv[4]   = 0x7ffd7121455e -- 1234$
argv[5]   = 0x7ffd71214563 -- 12345$

p (->)   = 0x1e36010
1605  Programación / Programación C/C++ / Re: Error al comparar datos en: 3 Diciembre 2015, 19:41 pm
En la libreria ctype hay una macro que te viene muy bien:

int isdigit(int c)

devuelve un valor distinto de 0 si c es un número decimal.

Con ella repasas los caracteres de la cadena y si hay alguno que no sea un número lanzas un mensaje de error. ;)
1606  Programación / Programación C/C++ / Una forma curiosa de dar un tamaño. en: 2 Diciembre 2015, 22:16 pm
Cuándo se usa la función malloc, por ejemplo, y una llamada básica podría ser algo así:

int *p = malloc(sizeof(int) * 5);

Y ahora viene la parte curiosa y mi planteamiento:

int arr[5] es un array de enteros.
int (*p)[5] es un puntero a un array de 5 enteros.
Lo único que tienen en común los dos son el tipo de dato, int, y el tamaño del array, 5. El nombre que le demos no tiene imporancia. Si se obvia dicho nombre nos debería dar un tamaño pero sin declarar nada.

Por tanto el código antes escrito podría codificarse de una forma un poco más intuitiva:

int *p = malloc( sizeof(int[5]) );

Y funciona, al menos con GCC.

>>> Editado porqué estas líneas no tienen un sentido práctico <<<

También funciona:

int *p = malloc( sizeof(int[5][5]) );

y

int **p = malloc( sizeof(int[5][5]) );


>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<

¿Qué os parece?
1607  Programación / Programación C/C++ / Re: Convertir de void a int en: 16 Noviembre 2015, 21:28 pm
Tal vez te falta dereferenciar el puntero:
int a = *(int*)numero;
1608  Programación / Programación C/C++ / Re: [Ayuda] Secuencia While en: 16 Noviembre 2015, 20:45 pm
Sí. Si quieres comparar el valor introducido con todos los anteriores deberás rellenar un array con cada iteración.
1609  Programación / Programación C/C++ / Re: [Ayuda] Secuencia While en: 16 Noviembre 2015, 20:16 pm
Utiliza otra variable que a final del bucle adquiera el valor que has entrado. Así en la nueva iteración podrás comparar el valor anterior con el actual.
1610  Programación / Programación C/C++ / Re: Problemas en C en: 16 Noviembre 2015, 20:04 pm
Prueba con esto:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main() {
  5.   char nombre[20];
  6.   char apellidos[40];
  7.   int edad;
  8.  
  9.   printf("Nombre: ");
  10.   fgets(nombre, 19, stdin);
  11.   *strchr(nombre, '\n') = '\0';
  12.   printf("Apellidos: ");
  13.   fgets(apellidos, 39, stdin);
  14.   *strchr(apellidos, '\n') = '\0';
  15.   printf("Edad: ");
  16.   scanf("%i", &edad);
  17.  
  18.   if (edad >= 18 && edad <= 22) {
  19.      printf("Hola %s %s", nombre, apellidos);
  20.   }
  21.   else {
  22.      printf("No cumples los requisitos");
  23.   }
  24.  
  25.   return 0;
  26. }
  27.  
Con fgets lees toda la cadena de entrada hasta pulsar ENTER y recoge hasta un máximo de caracteres que le has informado como último parámetro de la función.
Cómo también lee el carácter de nueva línea debes convertirlo en carácter nulo, y eso es lo que hace la línea donde se encuentra la función strchr.
Páginas: 1 ... 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 [161]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines