Discussion:
a ver si no me matais
(demasiado antiguo para responder)
Kenzo-Xs
2003-09-11 18:45:08 UTC
Permalink
Porque mira que os doy la tabarra , pero os aseguro que el sabado ya no sere
tan pesado (quizas dentro de un par de meses vuelva a la carga ya que como
suspenda... y eso es muy posible....)

A ver si me podeis decir que falla aki:
-------------------------------------------------
#include <stdio.h>

int mes,dias;

main(){
clrscr();
printf("Dime el numero de mes : ");
scanf("%i",&mes);
if (mes=2) printf("tiene 28 o 29 dias");
else
if(mes=4||6||9||11) printf("Tiene 30 dias");
else
if (mes=1||3||5||7||10||12) printf("Tiene 31 dias");
getch();
}
-----------------------------------------
Le dice el Nº de mes y te dice los dias que tiene

Pues me pone "siempre 28 o 29 dias"

no puede hacer esa funcion el if?????

Saludos
Julián Albo
2003-09-11 18:55:14 UTC
Permalink
Post by Kenzo-Xs
if (mes=2) printf("tiene 28 o 29 dias");
= es una asignación, el igual de comparación es ==.

Salu2
Kenzo-Xs
2003-09-11 19:13:02 UTC
Permalink
Hay dios mio , toy tonto , si no hay mas que decir

Muchisimas gracias julian

Como apruebe os invito a una borrachera ;-)))
Post by Kenzo-Xs
if (mes=2) printf("tiene 28 o 29 dias");
= es una asignación, el igual de comparación es ==.

Salu2
Winfree
2003-09-11 19:18:11 UTC
Permalink
Post by Julián Albo
Post by Kenzo-Xs
if (mes=2) printf("tiene 28 o 29 dias");
= es una asignación, el igual de comparación es ==.
Salu2
Además de esto debe corregir las demás ramas de las sentencia, porque
para ver que mes te han pasado debes poner como condición

else if (mes == 1 || mes == 3 || ... )

También puedes hacer la comprobación con la sentencia switch:

switch (mes)
{
case 1:
case 3:
case 5:
...
case 12: printf (%s,"Mes con 31 dias"); break;
case 4:
case 6:
...
case 11: printf (%s,"Mes con 30 dias"); break;
case 2: printf (%s,"Mes con 28 o 29 dias"); break;
default: printf (%s,"Mes erroneo"); break;
}

Bueno, espero no haberme equivocado, porque ya tengo un lio de
lenguajes ;-)
Francisco
2003-09-11 19:16:33 UTC
Permalink
Post by Kenzo-Xs
Porque mira que os doy la tabarra , pero os aseguro que el sabado ya no sere
tan pesado (quizas dentro de un par de meses vuelva a la carga ya que como
suspenda... y eso es muy posible....)
-------------------------------------------------
#include <stdio.h>
int mes,dias;
main(){
clrscr();
printf("Dime el numero de mes : ");
scanf("%i",&mes);
if (mes=2) printf("tiene 28 o 29 dias");
else
if(mes=4||6||9||11) printf("Tiene 30 dias");
else
if (mes=1||3||5||7||10||12) printf("Tiene 31 dias");
getch();
}
-----------------------------------------
Le dice el Nº de mes y te dice los dias que tiene
Pues me pone "siempre 28 o 29 dias"
no puede hacer esa funcion el if?????
Saludos
SOLUCION:

#include <stdio.h>
#include <conio.h>



main(){
int mes;
clrscr();
printf("Dime el numero de mes : ");
scanf("%i",&mes);
if (mes==2) printf("tiene 28 o 29 dias");
else
{
if(mes==(4||6||9||11)) printf("Tiene 30 dias");
else
printf("Tiene 31 dias");
}
getch();
}
Fernando Arbeiza
2003-09-11 19:16:02 UTC
Permalink
Post by Kenzo-Xs
if (mes=2) printf("tiene 28 o 29 dias");
Un pequeño truco es dar la vuelta a esas comparaciones; si siempre
utilizas

if (2 == mes)

si se te olvida un =, el compilador te muestra un error.

Un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Fernando Arbeiza
2003-09-11 19:43:07 UTC
Permalink
Post by Kenzo-Xs
int mes,dias;
No necesitas variables globales para nada. Mételas dentro de main.
Además, no utilizas dias, así que sobra.
Post by Kenzo-Xs
main(){
El valor más portable de retorno es int. Grábate esto: "main debe
devolver un int". Me suena habértelo dicho ;-)
Post by Kenzo-Xs
clrscr();
Esta función no es estándar, el prototipo no existe en stdio.h y además
no le encuentro mucha utilidad en este programa.
Post by Kenzo-Xs
printf("Dime el numero de mes : ");
scanf("%i",&mes);
Si el printf no tiene un carácter de retorno de carro '\n' no se asegura
que aparezca antes del scanf. Para asegurarte, tienes que incluir un
fflush(stdout). Por cierto, si no utilizas salida formateada, lo mejor
es que no utilices printf (puede darte problemas si el string contiene
el carácter %). Así que para imprimir un string te aconsejo:

* Si tiene que haber un salto de línea, utiliza puts:
puts("Una frase")

* Si no tiene que haber salto de línea, dos opciones:

- fputs("Una frase", stdout);
- printf("%s", "Una frase");
Post by Kenzo-Xs
if (mes=2) printf("tiene 28 o 29 dias");
else
if(mes=4||6||9||11) printf("Tiene 30 dias");
else
if (mes=1||3||5||7||10||12) printf("Tiene 31 dias");
Esto es mejor hacerlo con un switch que con ifs anidados.
Post by Kenzo-Xs
getch();
Otra función no estándar sin prototipo en stdio.h.
Post by Kenzo-Xs
}
Creo que sería mejor algo así:

/******************/
#include <stdio.h>

int main(void) {
int mes;

fputs("Dime el numero de mes : ", stdout);
fflush(stdin);
scanf("%i", &mes);

switch (mes) {
case 2:
puts("tiene 28 o 29 días");
break;
case 4: case 6: case 9: case 11:
puts("Tiene 30 días");
break;
case 1: case 3: case 5: case 7: case 10: case 12:
puts("Tiene 31 días");
break;
default:
puts("Eso no es un mes, burro");
}

return 0;
}

/* Fin de Fichero */
/******************/

Un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Kenzo-Xs
2003-09-11 20:49:31 UTC
Permalink
Si tienes razon , con switch es mas facil , lo que pasa es que estamos muy
avanzados con esas funciones

Muchas gracias
Post by Fernando Arbeiza
Post by Kenzo-Xs
int mes,dias;
No necesitas variables globales para nada. Mételas dentro de main.
Además, no utilizas dias, así que sobra.
Post by Kenzo-Xs
main(){
El valor más portable de retorno es int. Grábate esto: "main debe
devolver un int". Me suena habértelo dicho ;-)
Post by Kenzo-Xs
clrscr();
Esta función no es estándar, el prototipo no existe en stdio.h y además
no le encuentro mucha utilidad en este programa.
Post by Kenzo-Xs
printf("Dime el numero de mes : ");
scanf("%i",&mes);
Si el printf no tiene un carácter de retorno de carro '\n' no se asegura
que aparezca antes del scanf. Para asegurarte, tienes que incluir un
fflush(stdout). Por cierto, si no utilizas salida formateada, lo mejor
es que no utilices printf (puede darte problemas si el string contiene
puts("Una frase")
- fputs("Una frase", stdout);
- printf("%s", "Una frase");
Post by Kenzo-Xs
if (mes=2) printf("tiene 28 o 29 dias");
else
if(mes=4||6||9||11) printf("Tiene 30 dias");
else
if (mes=1||3||5||7||10||12) printf("Tiene 31 dias");
Esto es mejor hacerlo con un switch que con ifs anidados.
Post by Kenzo-Xs
getch();
Otra función no estándar sin prototipo en stdio.h.
Post by Kenzo-Xs
}
/******************/
#include <stdio.h>
int main(void) {
int mes;
fputs("Dime el numero de mes : ", stdout);
fflush(stdin);
scanf("%i", &mes);
switch (mes) {
puts("tiene 28 o 29 días");
break;
puts("Tiene 30 días");
break;
puts("Tiene 31 días");
break;
puts("Eso no es un mes, burro");
}
return 0;
}
/* Fin de Fichero */
/******************/
Un saludo.
--
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Carlos P.C.
2003-09-13 17:40:36 UTC
Permalink
Post by Fernando Arbeiza
/******************/
#include <stdio.h>
int main(void) {
int mes;
fputs("Dime el numero de mes : ", stdout);
fflush(stdin);
scanf("%i", &mes);
switch (mes) {
puts("tiene 28 o 29 días");
break;
puts("Tiene 30 días");
break;
puts("Tiene 31 días");
break;
puts("Eso no es un mes, burro");
}
return 0;
}
/* Fin de Fichero */
/******************/
El programa está casi correcto :-P prueba con el mes de agosto (8)... y
sucede que salta a default.

Solución-> Incluir "case 8:"

Es una puntualización sin importancia :-)
Fernando Arbeiza
2003-09-14 11:02:32 UTC
Permalink
Post by Carlos P.C.
El programa está casi correcto :-P prueba con el mes de agosto (8)... y
sucede que salta a default.
Mierda, el programa acaba de insultarme ;-)

Un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Fernando Arbeiza
2003-09-14 11:10:08 UTC
Permalink
Post by Carlos P.C.
El programa está casi correcto :-P prueba con el mes de agosto (8)... y
sucede que salta a default.
Por cierto, tu comentario es Off-Topic aquí. El estándar de C no asegura
que exista un mes que sea agosto, que tenga el valor 8, ni que tenga 31
días. Prueba en es.rec.calendario.zaragozano ;-P

Un saludo.
--
Fernando Arbeiza <URL: mailto:***@ono.com>
Crea tu propio Linux: <URL: http://www.escomposlinux.org/lfs-es>
Carlos P.C.
2003-09-15 15:14:15 UTC
Permalink
Post by Fernando Arbeiza
Por cierto, tu comentario es Off-Topic aquí. El estándar de C no asegura
que exista un mes que sea agosto, que tenga el valor 8, ni que tenga 31
días. Prueba en es.rec.calendario.zaragozano ;-P
Un saludo.
¡Oh! ¡Cielos!, ¿El mes de agosto no existe?, ¡Dios! y yo que creía que en
agosto estuve en Benidorm... supongo que fue un sueño ¡Vaya sueño! os lo
recomiendo ;-)

Kenzo-Xs
2003-09-11 20:57:34 UTC
Permalink
Entonces no es correcto poner esto:
if(mes=4||6||9||11)
asi funciona pero tiene el fallo de que el mes 1 dice que tiene 30 dias:
if(mes==(4||6||9||11))
Y asi parece que va perfecto:
if (mes == 1 || mes == 3 || ... ) (gracias WinFree)

Cual o cuales es la manera correcta de escribir el if???

Saludos y gracias
Post by Kenzo-Xs
Porque mira que os doy la tabarra , pero os aseguro que el sabado ya no sere
tan pesado (quizas dentro de un par de meses vuelva a la carga ya que como
suspenda... y eso es muy posible....)
-------------------------------------------------
#include <stdio.h>
int mes,dias;
main(){
clrscr();
printf("Dime el numero de mes : ");
scanf("%i",&mes);
if (mes=2) printf("tiene 28 o 29 dias");
else
if(mes=4||6||9||11) printf("Tiene 30 dias");
else
if (mes=1||3||5||7||10||12) printf("Tiene 31 dias");
getch();
}
-----------------------------------------
Le dice el Nº de mes y te dice los dias que tiene
Pues me pone "siempre 28 o 29 dias"
no puede hacer esa funcion el if?????
Saludos
Winfree
2003-09-11 23:01:29 UTC
Permalink
Post by Kenzo-Xs
Cual o cuales es la manera correcta de escribir el if???
Para mi la que yo te he dicho ;-) Tienes que tener en cuenta que
siempre que escribas un programa debes de hacer todo lo posible para
que sea lo más legible por otras personas. Pero vamos, que lo en lo
que tu haces tienes un error, por eso no te da. En C las condiciones
se consideran falsas si el valor que devuelve el resultado de la
expresión es 0, y cierto si es distinto. Es decir, que un if (0) nunca
se cumplirá. Ahora veamos lo que tu haces:

if ( mes == 4 || 6 || 9 || 11)

Supongamos que mes = 1, como dices tu. En la primera expresión el
resultado de evaluarla es falso, ya que mes != 4. Ahora bien, la
segunda expresión que tu tienes es 6, un número distinto que 0, por lo
que es cierto. Como es un Or y hay evaluación perezosa pues aquí ya
parará de comprobar y entrará a ejecutar las sentencias de este if, de
ahí que te de que el mes 1 tiene 30 dias.

Bueno, espero no haberme equivocado y no liarte más ;-)
Kenzo-Xs
2003-09-11 23:44:09 UTC
Permalink
Muchas gracias , a sido muy bien aclarado , ahora lo entiendo
Post by Winfree
Post by Kenzo-Xs
Cual o cuales es la manera correcta de escribir el if???
Para mi la que yo te he dicho ;-) Tienes que tener en cuenta que
siempre que escribas un programa debes de hacer todo lo posible para
que sea lo más legible por otras personas. Pero vamos, que lo en lo
que tu haces tienes un error, por eso no te da. En C las condiciones
se consideran falsas si el valor que devuelve el resultado de la
expresión es 0, y cierto si es distinto. Es decir, que un if (0) nunca
if ( mes == 4 || 6 || 9 || 11)
Supongamos que mes = 1, como dices tu. En la primera expresión el
resultado de evaluarla es falso, ya que mes != 4. Ahora bien, la
segunda expresión que tu tienes es 6, un número distinto que 0, por lo
que es cierto. Como es un Or y hay evaluación perezosa pues aquí ya
parará de comprobar y entrará a ejecutar las sentencias de este if, de
ahí que te de que el mes 1 tiene 30 dias.
Bueno, espero no haberme equivocado y no liarte más ;-)
Loading...