• Martes 21 de Mayo de 2024, 02:30

Autor Tema:  Que significa esto?...  (Leído 1301 veces)

freax

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Que significa esto?...
« en: Domingo 24 de Octubre de 2010, 05:50 »
0
Hola, estaba buscando hacer un reproductor con C.. bueno encontre que SDL te facilita un par de librerias para hacerlo... Pero mi problema no es ese... es dejo el codigo y despues explico mas:

Código: C
  1.  
  2. #include <stdio.h>
  3. #include<stdlib.h>
  4. #include <smpeg/smpeg.h>  // Agregamos la biblioteca smpeg
  5. #include <SDL/SDL.h>      // Agregamos la biblioteca SDL
  6.  
  7.    main (int narg, char *args[])
  8. {
  9.     SMPEG *mpeg;  // Variable donde se guardara el archivo MP3
  10.     SMPEG_Info info;  // Estructura donde se guardará la información del archivo
  11.     int vol=0;
  12.     if (narg<3)    // Se verifica que se hayan metido los 2 parámetros (archivo y volumen)
  13.     {
  14.         printf ("Usar:n %s <archivo> <vol>nn",args[0]);
  15.         exit(1);
  16.     }
  17.     mpeg = SMPEG_new (args[1], &info, 1);  // Se lee el MP3, utilizando la SDL para reproducirlo (tercer parámetro)
  18.     SMPEG_enableaudio (mpeg,1);  // Se activa el audio
  19.     sscanf (args[2],"%d",&vol);   // Se lee el volumen
  20.     if (!vol) vol = 50;        
  21.     SMPEG_setvolume (mpeg,vol);   // Se fija el volumen deseado
  22.     SMPEG_play (mpeg);            // Se empieza a reproducir
  23.     while (SMPEG_status(mpeg) == SMPEG_PLAYING)   // Bucle mientras se mantenga reproduciéndose el archivo
  24.     {
  25.         SMPEG_getinfo (mpeg,&info);  // Tomamos la información
  26.         printf ("%lf/%lfn", info.current_time, info.total_time);  // Imprimimos el avance del MP3
  27.         SDL_Delay(100);    // Hacemos una pausa de 10 ms, porque de otra forma este proceso ocuparía todo el procesador
  28.         system("clear");    
  29. }
  30.     SMPEG_delete(mpeg); // Eliminamos el apuntador al MP3  
  31.  
  32.     return 0;
  33. }
  34.  


pero no entiendo a que se refiere con :
Código: C
  1.  if (!vol) vol = 50;
  2.  

Ojala me puedan explicar a que se refiere y como se usa eso de  if(! X) ... Gracias

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: Que significa esto?...
« Respuesta #1 en: Domingo 24 de Octubre de 2010, 08:43 »
0
buenas

como supongo que sabras, en una sentencia de control if() se evalua la expresion entre parenesis, si el resultado de la expresion es distinta de 0 se ejecuta la sentencia (simple o compuesta) que esta a continuacion, y si es 0, se salta al final de esa.

el operador ! es el operador de negacion (NOT)
si el operando es distinto de 0 entonces ! devuelve 0, y en caso de ser 0 devuelve algo distinto de 0

hacer (!vol) es equivalente a hacer (vol == 0)

o sea que
if(!vol) vol = 50;
seria, si vol es 0 entonces vol = 50.

como el programa comprueba la cantidad de parametros, esa sentencia supongo que esta por si se pasa un valor no numerico como segundo parametro.

saludos
The sweet smell of a great sorrow lies over the land.


m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Que significa esto?...
« Respuesta #2 en: Domingo 24 de Octubre de 2010, 16:18 »
0
Añadiendo a la excelente explicación de Epa: ten en cuenta que para C, 0 es falso y cualquier otro número es verdadero. Por ejemplo:

Código: C
  1. int i = 0;
  2. int j = 0;
  3.  
  4. scanf(&i,"%dn");
  5. scanf(&j,"%dn");
  6.  
  7. if (i)
  8. {
  9.     printf("i es verdadero para i = %dn", i);
  10. }
  11. else
  12. {
  13.     printf("i es falso para i = %dn", i);
  14. }
  15.  
  16. if (i && j)
  17. {
  18.     printf("-i y j- es verdadero para i = %d y j = %dn", i, j);
  19. }
  20. else
  21. {
  22.     printf("-i y j- es verdadero para i = %d y j = %dn", i, j);
  23. }
  24.  
  25. if (i || j)
  26. {
  27.     printf("-i o j- es verdadero para i = %d y j = %dn", i, j);
  28. }
  29. else
  30. {
  31.     printf("-i o j- es falso para i = %d y j = %dn", i, j);
  32. }
  33.  
  34. if (!j)
  35. {
  36.     printf("-no i- es verdadero para i = %dn", i);
  37. }
  38. else
  39. {
  40.     printf("-no i- es falso para i = %dn", i);
  41. }
  42.  
Y así con las operaciones booleanas que quieras probar.

En mi opinión es mucho más limpio y entendible en C no usar los números como booleanos, sino como lo que son: números. Por ejemplo, en vez de

Código: C
  1. if (!x)
  2.  
es mejor poner

Código: C
  1. if(0 == x)
  2.  
Es mucho más legible y entendible.

Saludos.

freax

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Que significa esto?...
« Respuesta #3 en: Domingo 24 de Octubre de 2010, 17:18 »
0
Ok, saludos y muchas gracias  :D ... Nadie me lo pudo haber explicado mejor que ustedes 2 XD... :lol: Gracias!...