Problema del compilador?!?!

Iniciado por ChicoMaravilla, 8 Noviembre 2011, 03:07 AM

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

ChicoMaravilla

Buenos días a todos, :D hace tiempo que no entraba al foro, pues aquí abri un tema por que no se que ondina con este compilador.
Soy nuevo en C, pero no en la programación, aun así no se por queee, quizas sea el compilador que no incluya el stdio.h o no se que sera aunque no creo que sea eso, no es la primera vez que me pasa. Yo estoy aprendiendo C y me baje el Dev C++ por recomendaciones que lei en la web, pero miren este es el codigo:

#Include <stdio.h>

int x, y;

main()
{
     printf("\n Input an integer value for x: ");
     scanf("%d", &x);
     printf("\n Input an intenger value for y: ");
     scanf("%d", &y);
     
     if (x == y)
        printf("x is equal to y");
     if (x < y)    
        printf("x is smaller than y");
     if (x > y)
        printf("x is greater than y");
       
     scanf("%d");
     return 0;
}


si es el compilador, alguien no me recomienda otro bueno? que sirva para C?

No es la primera vez que me pasa, como ya dije. Este code esta en el libro aprender a programar en C en 21 días (muy bueno en mi opinión)

Desde ya muchas gracias  ;-)

PD: Tampoco se porque ahora que postie en el foro, aquí aparecieron esos numeros raros antes del enunciado... :/

pucheto

#Include es con minuscula.... #include

La culpa practicamente nunca es del compilador...

ChicoMaravilla

correcto, era eso :) un despiste mio  :rolleyes:, gracias por la respuesta inmediata

Saludos

rir3760

Si ese programa lo copiaste tal cual de ese libro mejor cambia a otro ya que tiene un error y varios "detallitos". El tema obligatorio a leer en este caso es [Libros/Papers] C/C++.

El error se encuentra en la ultima llamada a scanf, se deben pasar dos argumentos pero la función solo recibe uno:
scanf("%d");

Los detallitos son la definición de la función "main" (en C99 no se puede omitir el tipo) y las llamadas a printf: las tres primeras, al no terminar con el carácter '\n', no dan garantías de que el bufer de la salida estándar se vacié y las tres ultimas se pueden remplazar con llamadas a "puts".

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

ChicoMaravilla

Cita de: rir3760 en  8 Noviembre 2011, 04:19 AM
Si ese programa lo copiaste tal cual de ese libro mejor cambia a otro ya que tiene un error y varios "detallitos". El tema obligatorio a leer en este caso es [Libros/Papers] C/C++.

El error se encuentra en la ultima llamada a scanf, se deben pasar dos argumentos pero la función solo recibe uno:
scanf("%d");

Los detallitos son la definición de la función "main" (en C99 no se puede omitir el tipo) y las llamadas a printf: las tres primeras, al no terminar con el carácter '\n', no dan garantías de que el bufer de la salida estándar se vacié y las tres ultimas se pueden remplazar con llamadas a "puts".

Un saludo

:o
ese scanf lo agregué yo al final, por que no tenía manera de que se quedara quieto  :xD, (mis conocimientos de C son muy limitados por ahora), en cuanto a el resto si, esta igual.

no entiendo eso de los printf, pues el /n, tengo entendido que salta de renglón, y si iría al final, mostraría en el siguiente renglón el scanf  :D

rir3760

Cita de: Chico_Maravilla en  8 Noviembre 2011, 12:59 PMno entiendo eso de los printf, pues el /n, tengo entendido que salta de renglón, y si iría al final, mostraría en el siguiente renglón el scanf

El problema al llamar a printf de esta forma:
printf("\n Input an integer value for x: ");
scanf("%d", &x);

Es que no tenemos garantizado que la cadena "\n Input an integer value for x: " se imprima inmediatamente en la salida estándar (puede quedarse en su bufer).

Para tener esa seguridad se debe cumplir uno de tres escenarios:

A) El bufer de la salida estándar se llena.
B) La secuencia de caracteres a imprimir termina con '\n'.
C) Se indica explícitamente que debe vaciarse el bufer.

El primer caso no lo controlamos así que mejor nos olvidamos de el.

El segundo caso se consigue al llamar a la función así:
printf("\n Input an integer value for x: \n");
Pero como no se formatea valor alguno se puede sustituir esa función con "puts" generando el mismo efecto (ella imprime automáticamente el '\n' después de la cadena indicada):
puts("\n Input an integer value for x: ");

El tercer caso se consigue llamando a la función "fflush" para que vacie el bufer del stream indicado como argumento (stdout es la salida estándar):
printf("Input an integer value for x: ");
fflush(stdout);


Por ultimo lo subjetivo (cuestión de estilo): cuando uno escribe no pasa al siguiente renglón y empieza a escribir ahí así nada mas.

En su lugar uno escribe hasta alcanzar el final del renglón y solo entonces pasa al siguiente. Esa es la idea de tener el '\n' al final de la cadena (y no al principio).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language