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

#1481
El "struct hack" aplica cuando se trata del ultimo campo de una estructura, en tu ejemplo estamos tratando con un array.

En cuanto al manejador de señales no veo el problema, de nuevo si así lo decidimos basta con el uso de alias para reducir (y aclarar) la declaración:
typedef void (*pfn)(int);
pfn signal(int sig, pfn);


Un saludo
#1482
Un problema (no lo digo con malicia) es tu manejo del español, si tratas de comunicar algún punto fino (por ejemplo ironía) me temo que nos pones en dificultades (de por si ya es difícil comunicarse mediante texto).

Si bien el lenguaje C existe desde hace años este se estandarizo y, al menos técnicamente, se actualizo en 1989 y 1999. Por supuesto tiene, como cualquier otro lenguaje, sus "verrugas".

En cuanto a esto:
void (*(*handler[])())(int *, double) = {};
No es valido ya que se trata de un array sin indicar su numero de elementos inicializado con (aquí el detalle) una lista vacía.

Edito:

Si queremos complicarlo en serio se puede pero también podemos tratar de hacerlo mas legible utilizando un par de alias para los punteros a funcion:
typedef void (*pf)(int *, double);
typedef pf (*pg)(void);
   
pg handler[10];


Un saludo
#1483
Cita de: naderST en 14 Octubre 2011, 19:56 PMme dijo eso se como funciona mas no el por qué funciona así.
Pues por lo visto se trata de una confusión. Ese operador funciona de la forma descrita, el porque es así es algo que debería preguntarle al creador del lenguaje.

Mejor platica con el para aclarar las dudas.

Un saludo
#1484
Es posible por dos razones:

1) El operador "[]" es un operador binario, uno de los operandos (no importa cual) debe ser un puntero y el otro un valor entero.

2) Salvo ciertas excepciones (como en el caso del operador sizeof) el uso del nombre de un array resulta no en este sino en un puntero (del tipo apropiado) apuntando al primer elemento del array.

En tu caso el operador "[]" recibe los dos operandos que requiere: el puntero (resultado del uso del nombre "arreglo") y el entero (la constante 3).

Otro caso (cuyo uso solo deberia ser ilustrativo) es:
printf("%c\n", "Hola, mundo"[3]);
printf("%c\n", 3["Hola, mundo"]);

En ambos casos el caracter que se imprime es 'a'.

Un saludo
#1485
En C no puedes comparar directamente dos cadenas. Como ya te indico El_Java debes verificar si el primer caracter de la cadena es diferente de '\0', solo si es asi la imprimes:
if (aux.antonimo[0] != '\0'){
   /* La cadena no esta vacia, la imprimes */
}


Un saludo
#1486
Si tienes un problema debes describirlo de una forma clara, si solo indicas "me dan bucle" no nos ayudas. Si para empezar los datos se guardaron correctamente entonces esas funciones no deben generar errores, si modificaste el programa entonces por favor publica el código fuente completo.

Ese par se puede reducir a:
void listarAnt()
{
   FILE *archivo;
   struct dato aux;
   
   if ((archivo = fopen (DICCIONARIO, "rb")) != NULL){
      while (fread (&aux, sizeof (struct dato), 1, archivo) == 1)
         printf ("Palabra: %s \nAntonimo: \n\t%s", aux.palabra, aux.antonimo);
      fclose (archivo);
   }
}


void listarPar()
{
   FILE *archivo;
   struct dato aux;
   
   if ((archivo = fopen (DICCIONARIO, "rb")) != NULL){
      while (fread (&aux, sizeof (struct dato), 1, archivo) == 1)
         printf ("Palabra: %s \nParonimo: \n\t%s", aux.palabra, aux.paronimo);
      fclose (archivo);
   }
}



Pero de nuevo lo que debes hacer es explicar en detalle el problema y presentar el código fuente modificado.

Un saludo
#1487
Programación C/C++ / Re: ayuda con getchar
10 Octubre 2011, 19:37 PM
Los problemas son varios.

Los tecnicos son dos: el primero que debes declarar la variable "grade" con el tipo "int" ya que ese es el valor de retorno de "getchar". Tambien debes tener en cuenta que todos los caracteres seran procesados, por ejemplo si tecleas:
A{ENTER}
El caracter 'A' se contabiliza asi como el caracter '\n' (generado por el {ENTER}) resultara en el mensaje de "entrada no valida".

Otro error es el EOF, no puedes simplemente teclear:
EOF{ENTER}
En su lugar la señal de fin de archivo se genera dependiendo del SO, en una linea en blanco debes utilizar la combinacion de teclas {CONTROL} + 'Z' (MS Windows) o {CONTROL} + 'd' (Linux + Bash).

Un programa sencillo para practicar:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int ch;
   
   
   while (1){
      printf("Teclea un caracter: ");
      fflush(stdout);
     
      if ((ch = getchar()) != EOF){
         printf("El caracter es %c\n", ch);
         
         /* Descartamos el resto de la linea */
         while ((ch = getchar()) != EOF && ch != '\n')
            ; /* Nada que hacer */
      }else
         break;
   }
   
   return EXIT_SUCCESS;
}


Un saludo
#1488
El error de debe a que estas tratando de utilizar un bucle "while" como si fuera un "for".

Cambia el bucle a:
Código (cpp) [Seleccionar]
for (x = 0; x < 10; x++)
   cout << x << endl;


Un saludo
#1489
Para calcular un numero "x" elevado a la potencia "y" se debe tener un acumulador (con 1 como valor inicial) el cual se multiplica "y" veces por el numero "x":
int x;
int y;
int i;
long res;

/* ... */

res = 1;
for (i = 0; i < y; i++)
   res *= x;

printf("%d^^%d == %ld\n", x, y, res);


Si necesitas de un buen libro lee el primer tema fijo de estos foros, su titulo lo dice todo: [ Libros/Papers ] C/C++.

Un saludo
#1490
Programación C/C++ / Re: Ayuda con fichero ?
8 Octubre 2011, 03:43 AM
Es un bucle infinito ya que no realizas ninguna operacion de lectura.

Leer lineas es contar el numero de caracteres '\n' en el archivo, eso lo consigues con:
int lineas(FILE *file)
{
   int ch;
   int num_lineas;
   
   num_lineas = 0;
   while ((ch = fgetc(file)) != EOF)
      if (ch == '\n')
         num_lineas++;
   
   return num_lineas;
}


Un saludo