Resultados 1 al 35 de 35

Tema: Alguien q sepa C++ ¿?

  1. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232

    Alguien q sepa C++ ¿?

    Ya se que este foro no toca esta parte de la informática, pero bueno, seguro que hay alguien q me pueda sacar d dudas.
    bien, tengo un txt en el cual hay lo siguiente:

    Juan
    Perez
    55581953


    Soy nuevo en este lenguaje, y tengo que hacer un programa en C++ que me lea los datos. A priori pense que era muy facil, pero no se pq no me funciona bien el programa:

    #include <stdio.h>

    int main () {
    FILE *fp;
    char nom[15];
    char cog[15];
    double dni;
    //int letra;
    //char tabla[24]="TRWAGMYFPDXBNJZSQVHLKE";
    //char letradni;
    //int i;
    fp = fopen ( "miDNI.txt", "r" );
    if(fp==NULL) printf("Error, no es troba miDNI.txt");
    fscanf(fp,"%s",&nom);
    fscanf(fp,"%s",&cog);
    fscanf(fp,"%d",&dni);

    printf("%s \n", nom);
    printf("%s \n", cog);
    printf("%d", dni);

    // letra=dni%23;
    // letradni=tabla[letra];
    // printf("%c \n",letradni);
    fclose ( fp );
    return 0;
    }


    Lo que está comentado no le hagáis caso. Leyendo ya sabeis de que va el programa ^^. Pues bueno, compilando y ejecutanto esto obtengo lo siguiente:

    C:\TC\BIN>dni.exe
    Juan
    Perez
    7425


    Pq me sale un 7425 en vez del 55581953¿? Incluso he probado con un float (el resultado es 0.0000000) o con un long y me da lo mismo. Alguien sabe pq?
    Gracias!

  2. Reiya
    Reiya está desconectado
    Usuario registrado CV
    Fecha de ingreso
    29 jun, 05
    Ubicación
    Geofront (Tokio 3)
    Mensajes
    432
    A mi me funciona como deberia, de todos modos, debes tener en cuenta que el fscanf lee hasta que se encuentra una nueva linea, si en el archivo miDNI.txt al final del dni no pones un salto de linea (un intro vamos) el fscanf leera lo que le de la gana. Otra cosa en el fscanf y en el printf el %d se usa con int (con un int debe sobrarte), para los float usa %f y para el double %Lf (creo).

    Esta pagina te vendra bien: http://www.cplusplus.com/reference/

    Hasta otra.

  3. Quetedigo
    Quetedigo está desconectado
    Administrador Avatar de Quetedigo
    Fecha de ingreso
    18 dic, 04
    Ubicación
    Sevilla
    Mensajes
    8,417
    Inicializa a 0 todo y limpia buffer de teclado.

  4. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    Lo de limpiar el buffer del teclado no se lo que es, y el resto q me habeis dicho lo he intentado y nada. Añadí incluso algo de texto en la siguiente linea para ver si me hacia algo, pero tp.

    Acabo de probar declarando float como dni y poniendo "%f" en vez de "%d" en sus respectivos sitios y si que me lo lee, pero como float, y por tanto me añade: 55581953.000000000

    Sinceramente, no lo entiendo -.-
    Com0 no sonsiga hacerlo le meto ahora un cast! xDD

  5. Ly0n
    Ly0n está desconectado
    Usuario registrado CV Avatar de Ly0n
    Fecha de ingreso
    25 oct, 06
    Ubicación
    01001100 01010101 01000111 01001111
    Mensajes
    2,204
    ¿Y cogiendo DNI como String? Así puedes además añadir la letra xDD

    El C ya lo tengo muy olvidado, pero bueno, como te han dicho un entero te sobra (hasta 2*10^9 aprox.). De todas formas creo que hay un fallo, y los Double se muestran de la misma forma que los Float, con %f, no con %d (enteros).

    También deberías probar el fwrite/fread (en este caso no, ya que el archivo lo creas tu) y el fput/fget.

    Por cierto, yo veía más cómodo el D.e.v.C.p.p [sin puntos, error 403] que el TurboC, ¿lo has probado?

    Un saludo

  6. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    No, no lo he probado. Y uso TutboC más que nada pq és el mismo que usamos en las prácticas de la carrera.
    Y lo cogerlo como string ya lo pense, pero tendre que pasarlo con el atoi o con alguna funcion a int, pq no se si se ve muy bien (no esta todo el codigo) pero lo que hare despues es hacer un mod 23, y si pones el resultado en la tabla, la letra resultante es la letra del DNI. Lo que quiero dcir es que necesitare como valor numerico esa variable, para poder interactuar con ella.

  7. Ly0n
    Ly0n está desconectado
    Usuario registrado CV Avatar de Ly0n
    Fecha de ingreso
    25 oct, 06
    Ubicación
    01001100 01010101 01000111 01001111
    Mensajes
    2,204
    Ajam, pués luego casi mejor intentar cogerlo como integer, ya que a mí personalmente el atoi nunca me entusiasmó... Sí fuese al revés, de int a char no habría complicación.

    Yo creo que así:

    #include <stdio.h>
    #include <stdlib.h>

    int main (void) {

    FILE *fp;
    char nombre[15];
    char apellidos[15];
    double dni;
    int letra;
    char tabla[24]="TRWAGMYFPDXBNJZSQVHLKE";
    char letradni;

    fp = fopen ( "miDNI.txt", "r" );

    if(fp==NULL)
    {
    printf("Error, no se ha encontrado miDNI.txt");
    }
    else
    {
    fscanf(fp,"%s",&nombre);
    fscanf(fp,"%s",&apellidos);
    fscanf(fp,"%f",&dni);
    fclose (fp);
    }

    printf("Nombre: %s \n", nombre);
    printf("Apellidos: %s \n", apellidos);
    printf("DNI: %d", dni);

    letra=dni%23;
    letradni=tabla[letra];
    printf("- %c \n",letradni);

    return 0;
    }

    A ver...

    Un saludo

  8. Quetedigo
    Quetedigo está desconectado
    Administrador Avatar de Quetedigo
    Fecha de ingreso
    18 dic, 04
    Ubicación
    Sevilla
    Mensajes
    8,417
    Primer fallo:

    - Has abierto el ficheo como lectura, pero al no estar, sacas el error, pero no lo creas!!

    quedaría:

    if(fp==NULL)
    {
    printf("Error, no se ha encontrado miDNI.txt");
    fopen("miDNI.txt","w");
    }


    Luego te lo puedo mirar, que no me puedo parar ahora.

    Chaoo!

  9. Ly0n
    Ly0n está desconectado
    Usuario registrado CV Avatar de Ly0n
    Fecha de ingreso
    25 oct, 06
    Ubicación
    01001100 01010101 01000111 01001111
    Mensajes
    2,204
    Quete, de hecho he visto un fallo, pero no ese; el no quiere escribir en el fichero, simplemente leer (por lo menos, de escribir no ha dicho nada). El fallo que he visto es que debería cerrar el else justo antes del return, es decir, no mostrar por pantalla nada más que el error.

    De todas formas échale un ojo, por que yo esto lo tengo muy olvidado xD (ahora uso PHP y JS, ni del .Net me acuerdo apenas).

    Un saludo

  10. Quetedigo
    Quetedigo está desconectado
    Administrador Avatar de Quetedigo
    Fecha de ingreso
    18 dic, 04
    Ubicación
    Sevilla
    Mensajes
    8,417
    Con el DNI basta un "int", que son 32 bits, es decir 2^32 valores de sobre; eso cubre cerca de los 2.000 millones tanto en + como en -

    Si no va a escribir fichero se usa scanf y no fscanf, sólo válido para ficheros. Entonces creo que el problema va en eso, en que al no haber creado el fichero, da fallos con fscanf.

    Sin ficheros sería:

    Código:
    #include <stdio.h>
    #include <conio.h>
    
    void main (void)
    {
      char tabla[]={'T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E'};
       int dni,resto;
       textcolor(LIGHTGREEN);
       cprintf("Introduce tu DNI, sin la letra: ");
       scanf("%d",&dni);
       resto=dni%23;
       textcolor(YELLOW);
       cprintf("\n\nEl DNI %d lleva la letra %c",dni,tabla[resto]);
       printf("\nPulsa cualquier tecla para salir");
       getch();
    }

    Usa primero esto sin ficheros y a ver si te rula. Y el main de toda la vida de Dios, no tiene por qué devolver nada, es el main y punto, se pone el menor código posible, haciendo uso de funciones.

    Cuando controles esto, pasamos a los ficheros.

  11. Ly0n
    Ly0n está desconectado
    Usuario registrado CV Avatar de Ly0n
    Fecha de ingreso
    25 oct, 06
    Ubicación
    01001100 01010101 01000111 01001111
    Mensajes
    2,204
    No me has entendido; no tiene que escribir en el fichero (lo que sería con el fprintf, fwrite, fputs o fputc), sino leer.

    La mejor opción, sí antes de leer tiene que escribir en el fichero (es decir, utilizando la aplicación) es utilizar fwrite/fread mediante una estructura de datos.

    En el caso de que el fichero lo cree manualmente, fscanf es lo recomendable, siendo más cómodo que fgetc/fgets.

    Viendo el código, diría que al menos por ahora es la segunda opción, se trata de leer datos de un fichero de texto debidamente estructurado (por lo que el fread no nos vale), así que queda como mejor opción fscanf.

    El fallo de la primera versión que nos ha puesto era que intentaba capturar una variable Double como Integer/Decimal (%d), cuando el método correcto es capturarla como Float (%f). Las opciones son corregir eso, o como dices utilizar un Int, más que suficiente para el número del DNI.

    Un saludo

  12. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    Cita Iniciado por Ly0n
    Viendo el código, diría que al menos por ahora es la segunda opción, se trata de leer datos de un fichero de texto debidamente estructurado (por lo que el fread no nos vale), así que queda como mejor opción fscanf.
    Si, yo de momento no pretendo escribir ningun archivo, solo leerlo. Y el archivo ya esta debidamente extructurado, como comentas. Ademas, tengo que utilizar la funcion "fscanf" pq me lo piden así.

    Cita Iniciado por Ly0n
    El fallo de la primera versión que nos ha puesto era que intentaba capturar una variable Double como Integer/Decimal (%d), cuando el método correcto es capturarla como Float (%f). Las opciones son corregir eso, o como dices utilizar un Int, más que suficiente para el número del DNI.

    Un saludo
    Haciendo las modificaciones que dices, es decir:

    #include <stdio.h>

    int main () {
    FILE *fp;
    char nom[15];
    char cog[15];
    int dni;
    fp = fopen ( "miDNI.txt", "r" );
    if(fp==NULL) printf("Error, no es troba miDNI.txt");
    fscanf(fp,"%s",&nom);
    fscanf(fp,"%s",&cog);
    fscanf(fp,"%d",&dni);

    printf("%s \n", nom);
    printf("%s \n", cog);
    printf("%d", dni);
    fclose ( fp );
    return 0;
    }


    El resultado q me muestra por pantalla es el siguiente:


    C:\TC\BIN>dni
    Juan
    Perez
    7425


    Como ya dije antes, la única forma que obtengo un valor "normal", es declarando como "float dni" y leyendo y escribiendo
    "/f" respectivamente. En este caso el resultado es:

    C:\TC\BIN>dni
    Juan
    Perez
    55581952.000000


    Podria aplicarle un CAST y listos, pero no me parece adecuado cuando por logica con un INT bastaria. Y me pica mucho la curiosidad de saber qué está fallando.

  13. Ly0n
    Ly0n está desconectado
    Usuario registrado CV Avatar de Ly0n
    Fecha de ingreso
    25 oct, 06
    Ubicación
    01001100 01010101 01000111 01001111
    Mensajes
    2,204
    ¿Puedes probar a declarar dni como double, sin tocar el resto del código? Sólo para probar una cosa.

    Un saludo

    Edito: lo olvidaba, tanto en el fscanf como en el printf ponle %f a dni, cuando esté como double.

    Otro saludo

  14. Quetedigo
    Quetedigo está desconectado
    Administrador Avatar de Quetedigo
    Fecha de ingreso
    18 dic, 04
    Ubicación
    Sevilla
    Mensajes
    8,417
    A mí me funciona a la perfección con este código:

    Código:
    #include <stdio.h>
    #include <conio.h>
    
    void main (void)
    {
    	FILE *fp;
    	char nom[15];
    	char cog[15];
    	int dni;
    	fp = fopen ( "miDNI.txt", "r" );
    	if(fp==NULL)
    	printf("Error, no es troba miDNI.txt");
    	else
    	{
    		fscanf(fp,"%s",&nom);
    		fscanf(fp,"%s",&cog);
    		fscanf(fp,"%d",&dni);
    	}
    	printf("%s \n", nom);
    	printf("%s \n", cog);
    	printf("%d", dni);
    	fclose ( fp );
    	getch();
    }
    El fichero creado para su lectura es éste:

    Código:
    Juan
    Perez
    77854865
    Prueba ahora a ver qué tal.

  15. Quetedigo
    Quetedigo está desconectado
    Administrador Avatar de Quetedigo
    Fecha de ingreso
    18 dic, 04
    Ubicación
    Sevilla
    Mensajes
    8,417
    Cita Iniciado por Ly0n
    ¿Puedes probar a declarar dni como double, sin tocar el resto del código? Sólo para probar una cosa.

    Un saludo

    Edito: lo olvidaba, tanto en el fscanf como en el printf ponle %f a dni, cuando esté como double.

    Otro saludo
    Un double lleva 8 decimales y el float, 4. No creo que le resuelva nada.

  16. Ly0n
    Ly0n está desconectado
    Usuario registrado CV Avatar de Ly0n
    Fecha de ingreso
    25 oct, 06
    Ubicación
    01001100 01010101 01000111 01001111
    Mensajes
    2,204
    He probado el ultimo código que tiene, y funciona perfectamente :?

    ¿Quizás el buffer del teclado? Métele un fflush.

    Un saludo

    PD: Olvida lo del double xD

  17. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    como es eso del buffer del teclado?

  18. Quetedigo
    Quetedigo está desconectado
    Administrador Avatar de Quetedigo
    Fecha de ingreso
    18 dic, 04
    Ubicación
    Sevilla
    Mensajes
    8,417
    fflush(stdin)

    Limpia el buffer del teclado, pero para leer no creo que sea necesario, aunque C es muy puñetero para estas cosas.

    Has probado mi código?

  19. pritt
    pritt está desconectado
    Administrador Avatar de pritt
    Fecha de ingreso
    05 nov, 03
    Mensajes
    15,425
    El problema creo que puede venir por aquí:

    fscanf(fp,"%d",&dni);

    Si en el archivo de origen tienen un simple espacio te puede dar un error.

    Por eso otros podemos probar el código y como hemos creado un archivo para el caso, que nos salga bien y tú que utilices el txt que tienes y éste tenga algún caracter después del número y te de el error.

    Para evitar esos problemas creo que lo mejor sería limitar el número de caracteres que lees a los necesarios para el DNI.

    No recuerdo ya como se hacía ni si el fscanf lo aceptaba, pero sería algo así: “%8ld” ... o utilizar scanf.

    Un saludo.

  20. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    He probado poniendo eso un par de veces y sigue funcionando =.

    Respecto a tu codigo, lo he probado y el resultado es el mismo que el mio:

    Juan
    Perez
    7425


    Ya empezaré a sospechar que es mi compilador, pero el caso es que en un ordenador de la uni funcionó "solo la primera vez" utilizando un int.

  21. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    Cita Iniciado por pritt
    El problema creo que puede venir por aquí:

    fscanf(fp,"%d",&dni);

    Si en el archivo de origen tienen un simple espacio te puede dar un error.

    Un saludo.
    Puede ser, pero de ser asi, pq si me reconoce el DNI entero cuando uso un FLOAT en vez de un INT?

    Tb me he dado cuenta que si pongo sólo los 4 primeros dígitos del DNI, es decir: 5558 me los lee a la perfeccion como int. Si pongo una cifra más, ya me los lee mal y el resultado es un numero negativo.

  22. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    Yo de nuevo! xDD Pues resulta que me he puesto a jugar a la "patata caliente" con el programa y creo que en C++ el integuer no es tan grande como decis! xD (bueno, al menos eso he deducido de los siguiente). He ido probando valores en el dni, asi que el valor maximo que me lee a la perfeccion como integer es el 32767. A partir de aki, es dcir, si pusiera 32768, sería el -32768 al leerse. El 32769 es el -32767, por lo q supongo q el int va del 32767...0...-32768, no? Y si no recuerdo mal en java es lo mismo, qué cabeza la mía! Tendriamos tb el long int, pero no creo q sirviera (seria el doble de 32767 pq no acepta negativos). El siguiente valor ya es el float (q es el unico q me funcionaba)...
    Lo q no entiendo es pq todos estamos diciendo que con el int ya tendria suficiente, o nos ekibocamos todos (me incluyo) o aun entiendo menos el problema de mi programa xDDDD

    He estado buscando información y en C++ un integer son 2bytes, es dcir, 16bits; 2^16=65536, entonces lo que puse arriba era correcto.
    Cita Iniciado por Pagina Web vía Google
    1-Un byte es la menor unidad de informacion que pueden direccionar la mayoria de las computadoras. En la mayoria de las arquitecturas el tipo char ocupa un solo byte, por lo tanto es la unidad minima. Un bool admite solo dos valores diferentes, pero es almacenado como un byte. El tipo integer ocupa generalmente 2 bytes, un long 4, double 8, y asi con el resto de los tipos.

  23. pritt
    pritt está desconectado
    Administrador Avatar de pritt
    Fecha de ingreso
    05 nov, 03
    Mensajes
    15,425
    :lol: :lol: :lol:
    ... con la iglesia hemos topado.

    Realmente C no garantiza un tamaño definido de variable, depende de la arquitectura y del compilador.

    Lo único que garantiza es la relación entre un tamaño y otro.

    Si lo que dices es así, teóricamente debes de estar trabajando en arquitectura de 16 bits (o el compilador trabaja así), con lo que:

    int = 16 bits = 2 ^ 16 = 65536

    Si utilizases arquitectura de 32 bits int = 32 Bits, 2 ^32 = 4294967296

    Compruébalo en tu caso: sizeof(int).

    Son cosas de las que ya no nos acordamos, pero ahí están.

    Un saludo.

  24. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    Pues si, ni yo había caído hasta que fui probando. En prácticas ensamblamos sobre un emulador del viejo Intel 8086, así que debe ser por eso que la versión del compilador tb es en arquitectura de 16b. Por cierto, que deberia darme el sizeof(int)? el valor en Bytes? Me da 2.

    Perdonad por el lio, tp yo sabía que estaba trabajando en 16b hasta que probé... No tengo más remedio que declararlo como float.

    Me podríais recomendar algun compilador para C++ q no sea demasiado engorroso? Quiero dcir, el eclipse por ejemplo esta muy bien y tal para trabajos grandes, pero prefiero algo similar al TurboC, simple y sencillo. Un solo click y tienes el exe.

  25. Ly0n
    Ly0n está desconectado
    Usuario registrado CV Avatar de Ly0n
    Fecha de ingreso
    25 oct, 06
    Ubicación
    01001100 01010101 01000111 01001111
    Mensajes
    2,204
    DevC-pp (sin el guión).

    Para mí de los más sencillos, interfaz gráfica y cuando quieras compilar y ejecutar, F9. Sin más rodeos. Además, incluye gran cantidad de ejemplo.

    Un saludo

  26. pritt
    pritt está desconectado
    Administrador Avatar de pritt
    Fecha de ingreso
    05 nov, 03
    Mensajes
    15,425
    Cita Iniciado por MacSpawn
    que deberia darme el sizeof(int)? el valor en Bytes? Me da 2.
    1 byte = 8 bits

    2 bytes = 16 bits

    ... por lo tanto, arquitectura de 16 bits, el resultado es correcto.

    int = 65536

    Así que ya sabes donde está el problema

    Has de buscar un valor entero más largo. No sé si tu compilador admitirá el long o long long, o le asignas f y luego le quitas los decimales.

    Un saludo

  27. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    Acabo de crear el programa completo, calculando la letra y tal con el compilador que me has dicho, LyOn, y funciona a la perfección. Gracias
    Para ir practicando por mi cuenta usaré este, y para prácticastendre que usar el otor, que remedio! :o

  28. pritt
    pritt está desconectado
    Administrador Avatar de pritt
    Fecha de ingreso
    05 nov, 03
    Mensajes
    15,425
    Me alegro de que lo hayas solucionado.

    Te olvidaste de algo fundamental en la programación, la Ley de Murphi. Mi profe de programación siempre nos la recordaba para que no dejásemos nunca de contemplar un posible error.

    Un saludo.

  29. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    Es q es algo tan raro q ni yo me esperaba que a estas alturas me fueran a hacer trabajar con un compilador que trabaja en 16b

  30. pritt
    pritt está desconectado
    Administrador Avatar de pritt
    Fecha de ingreso
    05 nov, 03
    Mensajes
    15,425
    Es lo que tiene eso de "estudiar", que siempre lo hacen con "algo" que te pueda dar problemas y no puedas averiguar el por qué con la facilidad de los medios actuales.

    ... yo empecé estudiando Módula-2 porque decían que era un lenguaje muy bien estructurado. Lo gracioso era que en el libro (teoría) te decía una cosa y luego cuando eso lo aplicabas a la práctica, el compilador te decía que naranjas de la China.

    El mayor problema venía a la hora de los exámenes: Normalmente te vas a acordar más de lo que has llevado a la práctica que de la teoría, pero en los exámentes exigían que pusieses lo que decía el librito (teoría).

    ... y no hablemos ya del código máquina, direccionamientos y cosillas de esas, que es para ponerse a llorar directamente, con el agravante de que ¿quién narices lo va utilizar hoy en día?

    Un saludo.

  31. MacSpawn
    MacSpawn está desconectado
    Usuario registrado CV
    Fecha de ingreso
    15 oct, 07
    Ubicación
    Barcelona
    Mensajes
    232
    Tiene gracia... pq es precisamente esa asignatura. Hasta ahora todo ha sido en ensamblador, pero no se pq hemos cambiado a C++. Sólo se que algo tiene que ver con el 8086 xD. Yo empecé con java, y ahora los q empiezan carrera estudian algo llamado Paiton o algo asi, no lo conozco sinceramente.

  32. Ly0n
    Ly0n está desconectado
    Usuario registrado CV Avatar de Ly0n
    Fecha de ingreso
    25 oct, 06
    Ubicación
    01001100 01010101 01000111 01001111
    Mensajes
    2,204
    Bueno, es como hoy día C, se estudia por su estructura y por que lo aprendido en el se puede exportar de una u otra forma a la mayoría de lenguajes (o por lo menos por eso lo estudié yo, aunque por lo que tengo entendido es un lenguaje muy potente). Pero a nivel práctico, dudo que en cualquier empresa te pidan un programa en C, ya que no es orientado a objetos.

    Sobre la facilidad de los medios actuales, realmente programar en .Net con el Visual Studio es una gozada, pero bueno, hay que empezar por abajo.

    De hecho yo ahora me dedico de forma exclusiva a lenguajes utilizados en la creación de webs, y por desgracia no conozco ningún editor para PHP lo suficientemente decente, así que la opción que me queda es Dreamweaver (porque es más cómodo para visualizar el código fuente, coloreado y eso) y activar los warnings, y aún así te dejas media hora revisando una maldita línea para que al final el fallo sea una simple comilla, una coma, un punto y coma, una variable mal escrita...

    Un saludo a todos y suerte con el proyecto, MacSpawn.

    ------------

    Ups, me acaba de llegar el aviso de respuesta, no había visto tu último mensaje

  33. Quetedigo
    Quetedigo está desconectado
    Administrador Avatar de Quetedigo
    Fecha de ingreso
    18 dic, 04
    Ubicación
    Sevilla
    Mensajes
    8,417
    C se estudia porque es el padre de todos los lenguajes. Es raro estudiar Java y luego C.

    Una vez sabido lo básico de C, Java está chupao, porque las clases al fin y al cabo son funciones, se usan instrucciones comunes, etc.

    Con php pasa lo mismo, for, while, if y palante xddd

    El problema de los lenguajes para web como html o php es la falta de un buen "editor" que te indique los fallos-errores, tipo Eclipse o Jdeveloper para java.

  34. pritt
    pritt está desconectado
    Administrador Avatar de pritt
    Fecha de ingreso
    05 nov, 03
    Mensajes
    15,425
    Cita Iniciado por Quetedigo
    C se estudia porque es el padre de todos los lenguajes.
    ... hombre eso sería muy discutible.

    Como padres creo que habría que citar más bien a lenguajes más antiguos como Pascal, Cobol, Fortran y ALGOL.

    De hecho el CPL surgió teóricamente para juntar los beneficios de estos cuatro lenguajes en uno y eliminar las cosas innecesarias, pero tuvo múltiples problemas, entre ellos que era demasiado pesado.

    Para intentar paliar este problema surgió el BCPL, y aún así, con posterioridad surgió el B, más simplificado, que es del que realmente surgió el C.

    Incluso la programación orientada a objetos nació del Pascal (modula) y no de C.

    Un saludo.

  35. Prowl
    Prowl está desconectado
    Usuario registrado CV
    Fecha de ingreso
    16 jun, 07
    Ubicación
    Tarragona
    Mensajes
    1,939
    No había visto este post XD

    El problema era ese efectivamente... con TurboC int = 2bytes (±32768) por lo que para el DNI se te quedaba corto (con un unsigned int tendrías hasta +65536).
    La manera más sencilla de solucionarlo es poniendo un unsigned long por ejemplo (cuando se lo quieras asignar a una variable basta con poner %ld en lugar de %d) y así te cubrirá toda la cifra sin decimales

    #include <stdio.h>

    int main () {
    FILE *fp;
    char nom[15];
    char cog[15];
    unsigned long dni;
    clrscr();
    fp = fopen ( "miDNI.txt", "r" );
    if(fp==NULL) printf("Error, no es troba miDNI.txt");
    fscanf(fp,"%s",&nom);
    fscanf(fp,"%s",&cog);
    fscanf(fp,"%ld",&dni);

    printf("%s \n", nom);
    printf("%s \n", cog);
    printf("%ld", dni);
    fclose ( fp );
    getch();
    return 0;
    }