[C con Clase] Hola soy nuevo en la lista y tengo algunas dudas.

Salvador Pozo salvador en conclase.net
Jue Sep 9 14:56:07 CEST 2010


El pasado 2010-09-09 11:23:15, Víctor escribió:
 
V> Hola, lo primero de todo dar las gracias por ayudarme. 
V> E podido hacer dos programitas, uno de ellos no me compila, y el otro, al ejecutarlo sobre windows xp, me da error. Me gustaría que me explicaseis en que me confundí. Y si podeis, adjuntarme el codigo.c para yo verlo y compilarlo. Muchisimas gracias.

Hola:

Veamos el primer programa.

Dependiendo de si se trata de un programa C o C++, hay cosas que se consideran errores o no. Lo corregiré como si se tratase de un programa C++.

Alguien ha comentado que es mejor aprender C antes de C++. Yo no estoy de acuerdo. Hay muchas diferencias entre uno y otro, y si el objetivo es aprender C++, empezar por C no te ahorrará nada, y puede complicarte las cosas.

1) No necesitas incluir "math", ya que no haces uso de ninguna de las funciones definidas en ese fichero de cabecera. Para trabajar con números en coma flotante no es necesario incluirla.

Si se incluyese, la forma de hacerlo en C++ es "#include <cmath>", si se trata de un programa en C, la forma en que lo has hecho sería correcta.

Para usar funciones como "printf" o "scanf" hay que incluir "stdio". En C++ se hace con la directiva "#include <cstdio>".

C++ define un espacio con nombre "std" para todas las funciones y estructuras estándar. De modo que la forma de invocar "printf", sería "std:printf". Se puede activar un espacio con nombre por defecto, de modo que no sea necesario usar el prefijo "std::", para ello se usa la directiva "using namespace", en este caso "using namespace std;".

2) En C++ no se puede omitir el tipo de retorno en las funciones. Es obligatorio indicarlo. En C, si se omite, se entiende que es "int". De modo que en C++ no se puede definir la función "main" como lo has hecho. La forma correcta es "int main()".

3) El siguiente error está en la llamada a "scanf". El primer parámetro es una cadena de formato, que indica el número y tipo de cada variable a leer. El resto de los parámetros, cuyo número queda definido por la cadena de formato, son direcciones de las variables (u objetos) que recibirán los datos leídos.

Tu no has indicado una dirección, sino una variable. La forma correcta es "scanf("%f", &primero);"

4) Un error, supongo, usas dos variables, "primero" que lees del teclado y "segundo" que almacena un resultado. Sin embargo, no haces uso de esa segunda variable. Supongo que lo que quieres mostrar es el resultado del cálculo.

El programa C++ queda así:

----8<------
#include <cstdio>
using namespace std;

int main()
{
    float primero, segundo;

    printf("Primero=\n");
    scanf("%f", &primero);
    segundo=2.5+primero;
    printf("El resultado es  %f\n\n", segundo);
    return 0;
}
----8<------

En el segundo programa hay errores similares:

En C++ se usa "cstdio", y "using namespace std;".
El valor de retorno de "main" es "int".
Se debe usar una dirección para los valores leídos mediante "scanf".
En el primer "printf" has puesto "print".
No se si es problema del fichero adjunto, pero no se puede dividir una cadena en varias líneas. Si tienes que hacerlo, en cada línea se deben cerrar las comillas, como en el programa siguiente.
Falta el "return 0;".

----8<------
#include <cstdio>
using namespace std;

int main()
{
    float   v,t,e;

    printf ("\nDime la velocidad de el móvil:");
    scanf  ("%f", &v);
    printf ("\Dime el tiempo :");
    scanf  ("%f", &t);
    e = v*t;

    printf ("\nUn móvil desplazándose a %5.2f Km/h durante %5.2f horas, "
            "recorre una distancia de %5.2f Km",v,t,e);
    return 0;
}
----8<------

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase