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

[0] Índice de Mensajes

Ir a la versión completa