Ayuda con codigo en C

Iniciado por DARKDMR, 13 Octubre 2010, 01:10 AM

0 Miembros y 1 Visitante están viendo este tema.

DARKDMR

Buenas amigos les escribo por un problema que tengo el cual es el siguiente:
tengo que hacer un ejercicio que me permita calcular el valor de un inmueble a partir del costo del terreno, construccion y del tipo de construccion (se agrega un impuesto del 15% del total cuando la construccion sea de lujo y no se agrega nada en especial en caso de que la construccion sea estandar.
mi codigo es el siguiente:
#include <stdio.h>
int main () {
     int valor,ter,cons,tipo, esperar;
     printf("introduzca el valor del terreno en bs: ");
     scanf("%d",&ter);
     printf("Diga el tipo de construccion si es de Lujo o estandar: ");
     scanf("%c",&tipo);
     printf("introduzca el valor de la construccion en bs: ");
     scanf("%d",&cons);
     if (tipo=='estandar') valor=ter+cons;
     else valor=(ter+cons)*15/100;
     printf(" el valor del inmueble es: %d.",valor);
     scanf("%d",esperar);
     }
     


No me lo corre como es y no se en donde me equivoque.
estoy utilizando este compilador Dev-C++
de ante mano agradezco la ayuda que pueda recibir y pido disculpas por mis molestias saludos.

Khronos14

#1
Hola DARKDMR, para empezar tienes varios errores conceptuales bastante graves:


scanf("%c",&tipo);

Aquí, lees un solo carácter y lo almacenas en una variable de tipo int. Lo correcto sería declarar tipo como char.


if (tipo=='estandar')

Esto en c no se puede hacer así, de hecho, tipo lo tienes declarado como una variable de tipo integer y la estas comparando con una cadena de caracteres. Para comparar cadenas de caracteres utiliza strcmp().


int main ()


Si declaras el procedimiento main() para que devuelva un int, al final de la función debes devolver algún valor o al compilar te dará un error.

DARKDMR

lo solucionaría como amigo?
porque es que el prof nos dio varios ejemplos y de hay nosotros teniamos que hacer este.
Gracias por la respuesta.

Shell Root

#include <stdio.h>

int main() {
    int sTerreno = 0;
    int sConstruccion = 0;
    int sTipo = 0;
    double sValor;

    printf("Ingrese el valor del terreno:\n");
    scanf("%d", &sTerreno);
   
    printf("Ingrese el tipo de construccion:\n    1-Lujo\n    2-Estandar\n");
    scanf("%d", &sTipo);

    printf("Ingrese el valor de la construcción:\n");
    scanf("%d", &sConstruccion);

    if (sTipo == 1){
        sValor = sTerreno + sConstruccion;
    }else{
        sValor = (sTerreno + sConstruccion) * 15 / 100;
    }

    printf("El valor del inmueble es: %f.\n", sValor);
    return 0;
}


Resultado,
Código (PoC) [Seleccionar]
shellroot@alex-laptop:~/Escritorio$ gcc PoC.c
shellroot@alex-laptop:~/Escritorio$ ./a.out
Ingrese el valor del terreno:
2000
Ingrese el tipo de construccion:
    1-Lujo
    2-Estandar
1
Ingrese el valor de la construcción:
3000
El valor del inmueble es: 5000.000000.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

DARKDMR

 ;-) muchas gracias amigo hay cosas que no entendi pero ya con eso de seguro lo termino gracias de nuevo por haberte tomado la molestia.

Shell Root

Pregunta por lo que no entiendes, yo también ando aprendiendo C y C++
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

DARKDMR

int sTerreno = 0;
    int sConstruccion = 0;
    int sTipo = 0;
    double sValor;

no entiendo por que lo igualo a 0

y

if (sTipo == 1){
        sValor = sTerreno + sConstruccion;
    }else{
        sValor = (sTerreno + sConstruccion) * 15 / 100;
    }

no entiendo porque hay que volver a abrir las llaves y por ultimo lo de return 0 lo que pasa es que nosotros no trabajamos asi o almenos hasta orita y cuando compilo el codo se cierra de una vez que me tira el resultado.
Gracias de nuevo amigo...

Shell Root

Se inicializa la variable y como no contiene nada entonces le pongo 0. Que sería igual poner (aunque siempre prefiero darle un valor).
int sTerreno;

Los corchetes es para representar el bloque de código al que pertenece la clausula IF. En este caso, como es solo una linea, no es obligatorio la inclusión de los corchetes.

El RETURN, es porque al iniciar el MAIN, le dices que retorne un entero, con el fin de verificar si ocurrió algún error en el método principal.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

someRandomCode

C no inicializa las variables por defecto, lo que tomen por valor inicial es lo que hubiera en ésa zona de memoria anteriormente, asique es correcto inicializar las variables.
Dadas las cantidades de memoria que tienen los equipos hoy en dia, es muy probable que de antemano no hubiere nada escrito por ahi, pero no está de más asegurarse.

vincentlaw

lo que te han dicho  Shell Root y someRandomCode es correcto y una cosa mas:


Citarcuando compilo el codo se cierra de una vez que me tira el resultado.

si te refieres a que se te sierra rapidisimo

puedes poner antes de tu ultimo corchete un

getchar();

o un

system("pause")

simplemente para ver el resultado, esto no tiene una funcion fundamental, es unicamente para  poder ver los resultados