Programación General > C/C++
Que significa esto?...
(1/1)
freax:
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 --- #include <stdio.h>#include<stdlib.h>#include <smpeg/smpeg.h> // Agregamos la biblioteca smpeg#include <SDL/SDL.h> // Agregamos la biblioteca SDL main (int narg, char *args[]){ SMPEG *mpeg; // Variable donde se guardara el archivo MP3 SMPEG_Info info; // Estructura donde se guardará la información del archivo int vol=0; if (narg<3) // Se verifica que se hayan metido los 2 parámetros (archivo y volumen) { printf ("Usar:n %s <archivo> <vol>nn",args[0]); exit(1); } mpeg = SMPEG_new (args[1], &info, 1); // Se lee el MP3, utilizando la SDL para reproducirlo (tercer parámetro) SMPEG_enableaudio (mpeg,1); // Se activa el audio sscanf (args[2],"%d",&vol); // Se lee el volumen if (!vol) vol = 50; SMPEG_setvolume (mpeg,vol); // Se fija el volumen deseado SMPEG_play (mpeg); // Se empieza a reproducir while (SMPEG_status(mpeg) == SMPEG_PLAYING) // Bucle mientras se mantenga reproduciéndose el archivo { SMPEG_getinfo (mpeg,&info); // Tomamos la información printf ("%lf/%lfn", info.current_time, info.total_time); // Imprimimos el avance del MP3 SDL_Delay(100); // Hacemos una pausa de 10 ms, porque de otra forma este proceso ocuparía todo el procesador system("clear"); } SMPEG_delete(mpeg); // Eliminamos el apuntador al MP3 return 0;}
pero no entiendo a que se refiere con :
--- Código: C --- if (!vol) vol = 50;
Ojala me puedan explicar a que se refiere y como se usa eso de if(! X) ... Gracias
Epa:
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
m0skit0:
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 ---int i = 0;int j = 0; scanf(&i,"%dn");scanf(&j,"%dn"); if (i){ printf("i es verdadero para i = %dn", i);}else{ printf("i es falso para i = %dn", i);} if (i && j){ printf("-i y j- es verdadero para i = %d y j = %dn", i, j);}else{ printf("-i y j- es verdadero para i = %d y j = %dn", i, j);} if (i || j){ printf("-i o j- es verdadero para i = %d y j = %dn", i, j);}else{ printf("-i o j- es falso para i = %d y j = %dn", i, j);} if (!j){ printf("-no i- es verdadero para i = %dn", i);}else{ printf("-no i- es falso para i = %dn", i);} 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 ---if (!x) es mejor poner
--- Código: C ---if(0 == x) Es mucho más legible y entendible.
Saludos.
freax:
Ok, saludos y muchas gracias :D ... Nadie me lo pudo haber explicado mejor que ustedes 2 XD... :lol: Gracias!...
Navegación
Ir a la versión completa