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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 160
151  Programación / Programación C/C++ / Re: [C] Problema al leer un char dentro de un while en: 30 Diciembre 2014, 04:13 am
El día de hoy empecé a codificar un programa que me permitiría obtener los componentes RGB de una cadena hexadecimal de color, si yo ingresara 6c6c6c me devolvería (108, 108, 108)
Si es para practicar, parte de tu proceso de aprendizaje del lenguaje C no hay problema. Pero hay que indicar que dicha operación se puede realizar de forma mas corta mediante scanf, mas o menos así:
Código
  1. unsigned r;
  2. unsigned g;
  3. unsigned b;
  4.  
  5. while (scanf("%2x%2x%2x", &r, &g, &b) == 3)
  6.   printf("%x\n%x\n%x\n\n", r, g, b);
En la llamada a scanf el especificador "%2x" indica que se consumirá un máximo de dos caracteres validos para la conversión (dígitos en base 16) y el valor de retorno se verifica para asegurarnos de que se leyeron los tres números correctamente.

----

para corregir el error duplica la funcion   scanf("%c", &respuesta);
En este caso en particular (carácter '\n' de la linea anterior en el bufer de la entrada estándar) no es necesario duplicar la llamada a función, en su lugar basta con utilizar la cadena de formato " %c" donde el espacio al inicio de ella le indica a scanf que primero descarte todos los caracteres de espacio blanco (espacio, avance de linea, etc.) que encuentre, solo entonces se leerá el carácter y almacenara en la dirección indicada.

Un saludo
152  Programación / Programación C/C++ / Re: [C] Llamar a un array de punteros a caracteres en un bucle. en: 30 Diciembre 2014, 03:55 am
Es precisamente lo que quería lograr, sólo tengo el trabajo de pasarlo de c++ a c, no tengo conocimientos de c++ pero seguramente no debe ser cosa de otro mundo.
La parte relacionada con el uso de punteros a función la puedes utilizar tal cual, sin cambios:
Código
  1. int (*func[])(int) = {islower,isupper,isdigit};
  2.  
  3. /* ... */
  4.  
  5. if ((*func[i])(ch)){

Solo un detalle: la expresión "(*func[ i ])(ch)" es valida pero no es necesario el operador de indirección, se puede utilizar "func[ i ](ch)" sin problemas.

Un saludo
153  Programación / Programación C/C++ / Re: Maximo y minimo de un vector (Funciones) en: 27 Diciembre 2014, 17:56 pm
Cuando tengas un problema con uno de tus programas lo primero que debes hacer es compilarlo en el modo mas estricto que permita el compilador ya que esa es la forma mas fácil de detectar errores, como hacerlo se debe describir claramente en su documentación.

Las partes a corregir son:

* En la función main llamas a "max_min_lista" y en esta falta el uso del operador "dirección de" (el '&') con los dos últimos argumentos:
Código
  1. max_min_lista(vector, dim, maximo, minimo);
  2.  
  3. /* Debe cambiarse a: */
  4. max_min_lista(vector, dim, &maximo, &minimo);

* En la función "max_min_lista" falta el uso del operador "*" al utilizar los parámetros "max" y "min" ya que estos son punteros, la susodicha con los cambios termina así:
Código
  1. void max_min_lista(int *v, int dim, int *max, int *min)
  2. {
  3.   int f, c;
  4.  
  5.   *min = v[0];
  6.   *max = v[0];
  7.  
  8.   for(f=0;f<dim;f++){
  9.      if(v[f] > *max){
  10.         *max = v[f];
  11.      } else if(v[f] < *min){
  12.         *min = v[f];
  13.      }
  14.   }
  15.  
  16.   printf("Maximo: %d   Minimo: %d", *max, *min);
  17. }

Por ultimo hay que cambiar la definición de la función main a "int main(void) ..." o bien "int main() ..." y eliminar en la función "max_min_lista" la variable "c" ya que no se utilizan en el programa.

Un saludo
154  Programación / Programación C/C++ / Re: Aprendiendo el uso basico de apuntadores ! no me da el resultado correcto en: 25 Diciembre 2014, 20:23 pm
Que tal, apenas estoy aprendiendo el uso basico de apuntadores, hice este programita para calcular el promedio, sin embergo, me da mal el promedio, la pregunta es: que estoy haciendo mal ?
El problema principal en el programa es de diseño.

1) No necesitas de las variables "globales", ademas hay que evitar su uso siempre que sea posible.

2) La función "SolicitudEingresoDeValores" se debe modificar pasando las direcciones de la cinco variables con la intención de modificarlas dentro de la función:
Código
  1. void SolicitudEingresoDeValores(float *a, float *b, float *c, float *d, float *e)
  2. {
  3. printf("ingrese el primer valor: \n");
  4. scanf("%f", a);
  5.  
  6. printf("ingrese el primer valor: \n");
  7. scanf("%f", b);
  8.  
  9. printf("ingrese el primer valor: \n");
  10. scanf("%f", c);
  11.  
  12. printf("ingrese el primer valor: \n");
  13. scanf("%f", d);
  14.  
  15. printf("ingrese el primer valor: \n");
  16. scanf("%f", e);
  17. }

3) La función "Promedio" no requiere de punteros ya que no altera las variables, solo necesita sus valores para calcular el promedio:
Código
  1. float Promedio(float a, float b, float c, float d, float e)
  2. {
  3. return (a + b + c + d + e) / 5;
  4. }

4) Ambas funciones se utilizan en main de esa forma:
Código
  1. #include <stdio.h>
  2.  
  3. void SolicitudEingresoDeValores(float *a, float *b, float *c, float *d, float *e);
  4. float Promedio(float a, float b, float c, float d, float e);
  5.  
  6. int main(void)
  7. {
  8. float a, b, c, d, e;
  9.  
  10. SolicitudEingresoDeValores(&a, &b, &c, &d, &e);
  11. printf("%10.2f \n", Promedio(a, b, c, d, e));
  12.  
  13. return 0;
  14. }
  15.  
  16. /* ... */

Un saludo
155  Programación / Programación C/C++ / Re: ayuda con detallitos en mi programa (OJO paciencia, soy novato) en: 25 Diciembre 2014, 20:02 pm
Otro problema en el programa es la declaración de los arrays indicando su numero de elementos mediante los valores pasados a la función, por ejemplo en la función "CreacionEimpresionDeArregloBidimensional" (por cierto un nombre largo no es necesariamente claro, trata de utilizar nombres descriptivos pero razonablemente cortos):
Código
  1. void CreacionEimpresionDeArregloBidimensional(int filas, int columnas)
  2. {
  3.   int array[filas][columnas];
  4.  
  5. /* ... */
A ese tipo de arrays se les conoce como arrays de longitud variable y solo se garantizan en el estándar C99 (en C90 no existen y en C11 son opcionales), la solución aquí es revisar la documentación del compilador o bien utilizar las funciones para la reserva dinámica de memoria (malloc, calloc y realloc).

En cuanto al uso de scanf vs fgets+sscanf en programas como este no hay diferencia (si se requiere una validación completamente a prueba de fallos scanf y familia no bastan, se debe utilizar fgets + strtol/strtoul/strtod).

Un saludo
156  Programación / Programación C/C++ / Re: Buscar una cadena en un archivo. en: 23 Diciembre 2014, 17:57 pm
siempre me dice que la cadena no se encuentra en el archivo. Haciendo pruebas, comparé buscar con buscar y si funcionó, entonces no se que error haya al comparar con la cadena.
El problema se debe a que utilizas fgets para leer las lineas del archivo (lee y almacena el avance de linea) y gets para obtener la linea a buscar (lee y descarta el avance de linea). La solución ya la indico engel lex: sustituir el uso de gets por fgets

Un saludo
157  Programación / Programación C/C++ / Re: Ayuda con grafos en c en: 18 Diciembre 2014, 03:01 am
Para encontrar la ruta mas corta entre dos vértices en un grafo no dirigido puedes utilizar el algoritmo de Dijkstra.

Un saludo
158  Programación / Programación C/C++ / Re: [Duda] Pasando programa de C compilado en GCC a Visual Studio 2012 en: 11 Diciembre 2014, 02:41 am
¿Y si defino la variable char linea[N] después de obtener N?
Declarar un array cuyo numero de elementos se indica mediante un valor calculado en tiempo de ejecución (VLA, array de longitud variable) solo es posible si el compilador soporta el estándar C99 (en C90 no existe y en C11 (el ultimo) es opcional), si vas por esa aproximación solo queda revisar la documentación del compilador.

Otra opción ya la indico Eternal Idol, al utilizar las funciones para reserva dinámica de memoria (malloc, callo y realloc) te olvidas de ese problema.

Ya por ultimo no es necesario utilizar fgets y strlen para conocer la longitud de la cadena mas larga y verificar que el primer elemento del array no sea cero es innecesario ya que si fgets no retorna NULL significa que leyó y almaceno por lo menos un carácter en el array (mas el carácter '\0').

Una forma mas simple de obtener la longitud máxima incluyendo el carácter '\n' es mediante fgetc, mas o menos así:
Código
  1. FILE *p_fichero;
  2. int ch;
  3. long max_len;
  4. long len;
  5.  
  6. /* ... */
  7.  
  8. max_len = len = 0;
  9. while ((ch = fgetc(p_fichero)) != EOF){
  10.   len++;
  11.  
  12.   if (ch == '\n'){
  13.      if (len > max_len)
  14.         max_len = len;
  15.  
  16.      len = 0;
  17.   }
  18. }

Un saludo
159  Programación / Programación C/C++ / Re: problemas con string Urgente en: 10 Diciembre 2014, 03:29 am
Cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).

----

El problema que mencionas se debe al uso en la llamada a scanf del especificador "%[^\n]", con el lees todos los caracteres de la linea menos el '\n', este se queda en el bufer de la entrada estándar y causa que todas las siguientes llamadas (a la mentada función) terminen de inmediato. La solución mas fácil es utilizar " %[^\n]", el espacio antes del símbolo de porcentaje es critico ya que con el se descarta primero el espacio blanco.

Otra opción para leer por linea es fgets. Por ultimo en la función main solo imprimes el primer registro, supongo falta ahí un bucle para imprimirlos todos.

Un saludo
160  Programación / Programación C/C++ / Re: Ayuda Programa con estructuras C en: 3 Diciembre 2014, 02:58 am
Cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).

----

El error que comentas sucede porque declaras la funcion "VerDatos" antes que el tipo "struct lista", para solucionarlo debes declarar primero todos los tipos que necesitas en el programa y solo despues las declaraciones y definiciones de las funciones.

Tambien debes incluir el encabezado <string.h> antes de cualquier uso de la funcion strcmp.

Un saludo
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines