Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#351
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
Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).

Un saludo
#353
Cita de: daniloops en 29 Abril 2014, 19:52 PMme 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:
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:
printf("ingrese edad \n");
scanf("%d",&edad);

printf("ingrese estado civil \n");
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 C/C++ / Re: Lenguaje C
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
Cita de: ++c en 28 Abril 2014, 21:47 PMMe 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:
#include <stdio.h>

int main(void)
{
   int contador = 0, suma = 0, x;
   
   while (1){
      printf("Dame un numero, introduce 9999 para salir: ");
      fflush(stdout);
      if (scanf("%d",&x) != 1 || x == 9999)
         break;
      else {
         suma += x;
         contador++;
      }
   }
   
   /*
   ** Si el numero de valores (contador) es diferente de cero:
   **    Calcular el promedio e imprimirlo en la salida estandar
   */
   
   return 0;
}


Un saludo
#356
Cita de: leosansan en 28 Abril 2014, 19:36 PMEl "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
Cita de: ryan parker en 23 Abril 2014, 05:54 AMAunque en este ultimo codigo no entiendo la linea:
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:
p = realloc(NULL, 100); /* mismo efecto que "p = malloc(100);" */

Un saludo
#358
Cita de: vangodp en 23 Abril 2014, 04:44 AM¿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:
/* Array de <10 elementos de tipo "int *"> */
int *matriz[10];


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


Un saludo
#359
Cita de: pedroedlp en 23 Abril 2014, 03:41 AMy 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:
struct moto{
   int precio;
   int km;
   char marca[100];
   char descripcion[100];
};

/* ... */

pf = fopen("datos.dat", "w+");
fprintf(pf, "%d\n%d\n", moto1.precio, moto1.km);
fprintf(pf, "%s\n", moto1.marca);
fprintf(pf, "%s\n", moto1.descripcion);


Y para leerlos como texto:
rewind(pf);
fscanf(pf, "%d %d%*c", &moto2.precio, &moto2.km);
fgets(moto2.marca, 100, pf);
fgets(moto2.descripcion, 100, pf);


Un saludo
#360
Cita de: pedroedlp en 22 Abril 2014, 23:54 PMcompilo, 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