Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Errores en codigos

Estas en el tema de Errores en codigos en el foro de C/C++ en Foros del Web. No comprendo que puede haber mal en estos codigos( no son errores de sintaxis)... pongo el 1.. Código: #include <stdio.h> void main(void) { int i,j,k=5; ...
  #1 (permalink)  
Antiguo 20/11/2006, 21:39
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
Errores en codigos

No comprendo que puede haber mal en estos codigos( no son errores de sintaxis)... pongo el 1..
Código:
#include <stdio.h>
void main(void)
{
int i,j,k=5;
scanf("%d%d",&i,&j);
if (i<k<j)
printf("k está entre los números leídos");
}
Porque me pone siempre que esta entre los numeors leidos, ponga los numeros que ponga? Ahora mirandolo mejor, acabo de ver que si lo pongo asi si me va " if (i<k && k<j)".. porque?

Otra duda que tengo , es sobre la instruccion switch.
Código:
switch(i)
{
case (i>0):
printf("i es positivo\n");
break;
case (i<0):
printf("i es negativo\n");
break;
case (i==0):
printf("i es cero\n");
}
POrque me da, este si, error al compilar? NO se pueden poner expresiones dentor de case? como haria entonces este problema?
" Escriba una sentencia switch que a partir de una nota expresada en forma numérica imprima su correspondiente
literal, según la siguiente correspondencia: 0 a 4 SUSPENSO, 5 y 6 APROBADO, 7 y 8 NOTABLE, 9 y 10
SOBRESALIENTE. Para cualquier otro valor de la nota numérica se imprimirá el mensaje VALOR
INCORRECTO.
"

Una ultima pregunta, dado este codigo:
Código:
typedef enum {falso, cierto} logico;
acierto=falso;
while(!acierto)
....
Porque entra en el bucle?? Por que si pongo en vez de (!acierto), (acierto), no entra? y porque si luego pongo en vez de acierto=falso, pongo acierto=cierto, entra en el bucle? ... No creo que las palabras acierto y falso, las interprete el compilador como 0 o 1, o si??

Saludos.
  #2 (permalink)  
Antiguo 21/11/2006, 01:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Cita:
Iniciado por N0vat0 Ver Mensaje
Porque me pone siempre que esta entre los numeors leidos, ponga los numeros que ponga? Ahora mirandolo mejor, acabo de ver que si lo pongo asi si me va " if (i<k && k<j)".. porque?
Ya sabes como arreglarlo, haciendo dos comparaciones. No funciona ya que la primera comparacion devuelve un valor de tipo bool (false, true = 0, 1), entonces la segunda comparacion es de un numero contra 0/1 y no contra k.

Lo podemos ver claramente en el output del VC++:
Código:
warning C4804: '<' : uso no seguro del tipo 'bool' en la operaciónn
Otra duda que tengo , es sobre la instruccion switch.

Cita:
Iniciado por N0vat0 Ver Mensaje
POrque me da, este si, error al compilar? NO se pueden poner expresiones dentor de case? como haria entonces este problema?
No se puede, lo harias asi:

Código:
case 0:
case 1:
case 2:
case 3:
  printf("SUSPENDIDO!!\n");
break;
Cita:
Iniciado por N0vat0 Ver Mensaje
No creo que las palabras acierto y falso, las interprete el compilador como 0 o 1, o si??
Si lo hace, los tipos enumerados a menos que le cambies el valor a mano empiezan en 0 con lo cual esos valores son justamente 0 y 1.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 22/11/2006, 01:21
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
Gracias, ahora tengo otra problema en otro codigo. Despues de leer las variables x e y, el programa se queda bloqueado, y despues, como intentando leer una direcccion de memoria que no deberia, sale el tipico cuadro de windows de "el programa a detectado un problema y debe cerrarse". Que pasa??
Código:
#include<stdio.h>
float max_doble(float,float);
void main()
{
float x,y;
scanf("%f%f",x,y);
printf("el doble maximo de %f y %f es %f",x,y,max_doble(x,y));
}
float max_doble(float a, float b)
{
float max;
if (a<b)
max=a;
else
max=b;
max=max*2;
}
Otra cosa respecto al programa. No he puesto que la funcion retorne ningun valor, es necesario? o retorna max de todas maneras? Esque hice un codigo parecido y retornaba max sin poner return max..

Saludos.
  #4 (permalink)  
Antiguo 22/11/2006, 02:15
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Cita:
Iniciado por N0vat0 Ver Mensaje
Gracias, ahora tengo otra problema en otro codigo. Despues de leer las variables x e y, el programa se queda bloqueado, y despues, como intentando leer una direcccion de memoria que no deberia, sale el tipico cuadro de windows de "el programa a detectado un problema y debe cerrarse". Que pasa??
scanf esta tratando de escribir lo que leyo por teclado en una direccion que vaya uno a saber cual es (x no esta inicializado a ningun valor). Entonces hay que pasarle la direccion correcta, en este caso las direcciones de x e y en memoria:

Código:
scanf("%f%f", &x, &y);
Cita:
Iniciado por N0vat0 Ver Mensaje
Otra cosa respecto al programa. No he puesto que la funcion retorne ningun valor, es necesario? o retorna max de todas maneras? Esque hice un codigo parecido y retornaba max sin poner return max..
Por supuesto que si ... eso en compiladores buenos da error ... y ademas da warnings el primer problema que tenias, el output de tu codigo en VC++:

Código:
warning C4700: local variable 'y' used without having been initialized
warning C4700: local variable 'x' used without having been initialized
error C4716: 'max_doble' : must return a value
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:19.