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 ... 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [36] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 ... 160
351  Programación / Programación C/C++ / Re: Duda con estructuras C en: 30 Abril 2014, 17:52 pm
Porque cuando declaras una variable fuera de toda función (en tu caso "Jugador") y quieres darle un valor inicial este debe ser uno constante como 123 o "alguna cadena" (no puedes utilizar llamadas a función).

Un saludo
352  Programación / Programación C/C++ / Re: Duda con estructuras C en: 30 Abril 2014, 16:45 pm
Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
Código
  1. puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).

Un saludo
353  Programación / Programación C/C++ / Re: Ayuda ejercicio principiante en: 29 Abril 2014, 23:18 pm
me piden ingresar la edad y estado civil de 10 personas pero al poner mi codigo solo me lee la edad y no puedo ingresar el estado civil(c=casado s=soltero) que tengo mal?
El problema se debe que la función scanf cuando se utiliza con el especificador "%c" (también ocurre con "%[]") no descarta el espacio blanco. Supongamos que al pedir la edad introduces:
Código:
18{ENTER}
Los caracteres '1' y '8' se procesan por scanf para obtener el entero 18 y se almacena en la variable "edad". El avance de linea se queda en el bufer de la entrada estándar.

Cuando pides el estado scanf lee el avance de linea y lo almacena en la variable "estado", para que esto no ocurra debes utilizar:
Código
  1. printf("ingrese edad \n");
  2. scanf("%d",&edad);
  3.  
  4. printf("ingrese estado civil \n");
  5. scanf(" %c" /* <== */,&estado);
Con " %c" el espacio indica que se debe descartar primero el espacio blanco (el '\n' de la linea anterior) y solo entonces tomar el carácter que sera almacenado en "estado".

Si te interesa el tema puedes utilizar el motor de búsqueda para revisar los temas relacionados con el bufer de la entrada estándar, hay por lo menos media docena.

----

Aparte de eso el programa tiene varias deficiencias, las dos mas importantes: 1) te piden obtener la información de diez personas pero tu pides solo cinco y 2) esa información se pierde ya que utilizas las mismas variables (edad y estado) para todas las personas.

Un saludo
354  Programación / Programación C/C++ / Re: Lenguaje C en: 29 Abril 2014, 02:19 am
Temas recomendando IDEs en este foro no faltan, para encontrarlas solo tienes que utilizar el motor de búsqueda de los foros. Te recomendaría no buscar uno perfecto, para un principiante siempre y cuando se tenga un manejo básico del SO cualquiera reciente es aceptable.

Otra opción es evitar de momento el IDE y en su lugar utilizar la linea de comandos para llamar al compilador junto con un editor de texto para programadores.

Un saludo
355  Programación / Programación C/C++ / Re: duda ejercicio, empezando con C en: 29 Abril 2014, 02:06 am
Me gustaría conocer como romper adecuadamente el programa si el primer dígito es 9999 sin mostrar el mensaje " El promedio total es 0.0 "

Cualquier indicación para programar más eficientemente se lo agradecería.
No tienes porque calcular el promedio en cada iteración del bucle, en su lugar debes calcularlo después de este y la condición de salida "x != 9999" nunca se alcanza (si el valor introducido es 9999 el bucle termina antes con la sentencia "break;").

Ademas la variable "contador" no refleja el numero de valores introducidos: si el primero es el valor de salida 9999 su valor es uno (el inicial) cuando debería ser cero. Por ultimo la variable "promedio" no es necesaria ya que lo unico que haces con el promedio es imprimirlo.

Si realizamos los cambios (mas algunos otros menores) el programa termina asi:
Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.   int contador = 0, suma = 0, x;
  6.  
  7.   while (1){
  8.      printf("Dame un numero, introduce 9999 para salir: ");
  9.      fflush(stdout);
  10.      if (scanf("%d",&x) != 1 || x == 9999)
  11.         break;
  12.      else {
  13.         suma += x;
  14.         contador++;
  15.      }
  16.   }
  17.  
  18.   /*
  19.    ** Si el numero de valores (contador) es diferente de cero:
  20.    **    Calcular el promedio e imprimirlo en la salida estandar
  21.    */
  22.  
  23.   return 0;
  24. }

Un saludo
356  Programación / Programación C/C++ / Re: Datos previo y siquiente en un arreglo en: 29 Abril 2014, 01:37 am
El "system("pause>nul")" te crea un fichero null.txt. Mejor usar getchar si lo que quieres es parar el programa.
No se crea un archivo (esa es la idea): se redirecciona a nul cuando se desea descartar la salida de un comando.

Un saludo
357  Programación / Programación C/C++ / Re: Copiando cadenas - comportamientos extraños en: 23 Abril 2014, 16:53 pm
Aunque en este ultimo codigo no entiendo la linea:
Código
  1. string temp = realloc(buffer, capacity * sizeof(char));
Por que si buffer comenzo con NULL, al llegar a esta linea como que asignara NULL para temp, y esto a mi entender como que terminaria el programa
No hay problema con esa linea ya una llamada a realloc con su primer argumento igual a NULL tiene el mismo efecto que llamar a malloc: se reserva un bloque de memoria con el tamaño indicado y cuyo contenido es no definido.

Por ejemplo:
Código
  1. p = realloc(NULL, 100); /* mismo efecto que "p = malloc(100);" */

Un saludo
358  Programación / Programación C/C++ / Re: Duda con matrices y paso por parametro en: 23 Abril 2014, 14:17 pm
¿Que efecto tiene poner () en (*matriz)?
En el caso de una declaración primero se consideran los paréntesis y corchetes (para indicar función y array, respectivamente) y solo después el '*', por ejemplo:
Código
  1. /* Array de <10 elementos de tipo "int *"> */
  2. int *matriz[10];

Si se desea utilizar otro orden (primero el asterisco) se deben utilizar paréntesis:
Código
  1. /* Puntero a <array de 10 elementos de tipo "int"> */
  2. int (*matriz)[10];

Un saludo
359  Programación / Programación C/C++ / Re: guardar estructuras en ficheros en: 23 Abril 2014, 04:19 am
y asi no me deberia andar?
Habría que saber a que te refieres con "andar".

Si te refieres a almacenar los datos como texto en el archivo eso no sucederá ya que continuas usando la función fwrite.

----

Si te refieres a que el programa correctamente almacene los datos de "moto1" y los lea inmediatamente en "moto2" eso tampoco ya que hay dos errores importantes: los campos "marca" y "descripcion" son punteros y no deberías almacenarlos en el archivo y antes de la lectura debes colocarte al inicio del archivo utilizando la función rewind.

----

Lo mejor por sencillo es utilizar arrays para los campos "marca" y "descripcion". Para imprimir en el archivo utilizas fprintf, mas o menos asi:
Código
  1. struct moto{
  2.   int precio;
  3.   int km;
  4.   char marca[100];
  5.   char descripcion[100];
  6. };
  7.  
  8. /* ... */
  9.  
  10. pf = fopen("datos.dat", "w+");
  11. fprintf(pf, "%d\n%d\n", moto1.precio, moto1.km);
  12. fprintf(pf, "%s\n", moto1.marca);
  13. fprintf(pf, "%s\n", moto1.descripcion);

Y para leerlos como texto:
Código
  1. rewind(pf);
  2. fscanf(pf, "%d %d%*c", &moto2.precio, &moto2.km);
  3. fgets(moto2.marca, 100, pf);
  4. fgets(moto2.descripcion, 100, pf);

Un saludo
360  Programación / Programación C/C++ / Re: guardar estructuras en ficheros en: 23 Abril 2014, 02:56 am
compilo, creo un archivo, abro el archivo creado y me sale todo raro, con codigos null y no se que
Eso sucede porque estas utilizando fwrite para escribir los datos en el archivo y esa funcion copia los bytes que los constituyen tal cual (como estan en memoria).

Si quieres que se almacenen de forma legible en el archivo debes utilizar las funciones fprintf, fputs, fgetc, etc. Ejemplos sobre el uso de ellas los puedes revisar cortesía del motor de búsqueda de los foros.

Un saludo
Páginas: 1 ... 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 [36] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines