Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - K-YreX

#521
No sé muy bien lo que pretendes la verdad. Quiero decir no lo entiendo... Si el array es de tipo <int> aunque tú pongas 'a', internamente te estará guardando un <int>, es decir, 97 en este caso. Pero bueno, para que haga lo que tú quieres creo que podrías sobrecargar la función con ambos tipos <char/int> o pasar un string y comprobar si ese string es numérico o alfabético.
Hay un par de funciones de la librería <cctype> muy útiles para esto último que te he comentado que son <isalpha()> e <isnum()>.

Yo personalmente no veo muy recomendable usar <auto> para un parámetro porque entonces estás permitiendo pasar cualquier cosa. Por eso el tema de buscar un tipo de variable común <string> o hacer una sobrecarga para los casos que quieras permitir.

Otra opción que veo ahora sería usar un <template> pero para esto sería recomendable aplicárselo tanto al array como al parámetro a buscar.

No sé si te servirá alguna de las opciones pero nunca me ha dado por probar este tipo de "curiosidades". :-X
#522
Es posible que esa segunda línea sea el contenido de alguno de los ficheros.
He de decir que no sé cómo funciona la siguiente instrucción por lo que doy por hecho que su funcionamiento es correcto:

hd_read(start_of_root, FAT32_FILES_PER_DIRECTORY * sizeof(struct DirectoryEntry), (uint8_t*)&drce[0]);


Tampoco sé si la salida que obtienes es a partir de los <printf()> y <kputs()> que se ven en la función o la obtienes mostrando después el contenido de <files_names_in_dir>.
Además la variable <aaa> la has declarado globalmente por lo que puede que estés modificando su valor en otro punto del programa o estés llamando más de una vez a esa función.
Y si de paso puedo conocer la estructura de directorios y ficheros con los que estás trabajando, es decir, su nombre. Y que compruebes que esa segunda salida no sea el contenido de alguno de los ficheros.

Lo siento pero es que hay demasiadas cosas que me estoy teniendo que imaginar...
#523
La nueva variable <aaa> (que espero que le pongas un nombre mejor :xD) controla sólo <files_names_in_dir>. Es decir que tendría que ser:

file_names_in_dir[aaa] = drce[i].file_name;
++aaa;


De todas formas, por si el error no es sólo ese y no consigues solucionarlo, para la próxima pon la salida que obtienes literalmente para que veamos mejor a qué se puede deber.
Yo quitaría los <continue> de todas formas y los <break> como ya te he comentado... :silbar:
#524
Diría que el error son los <continue>...
Piensa en una iteración <i = 0> y se cumple una condición y por tanto un <continue>. Ahora <i = 1> pero no se han ejecutado las líneas siguientes al <continue> en esa iteración por lo que no se ha ejecutado la línea 28.
Ahora no se ejecuta ningún <continue> (recordemos i = 1). Estás guardando <drce[1].file_name> pero lo estás guardando en <files_names_in_dir[1]>... Qué hay en <files_names_in_dir[0]>??? Basura.

Tienes que usar una variable auxiliar que sólo se incremente si se ejecuta la línea 28 para guardar siempre en posiciones consecutivas.

Por algo no se recomiendan usar ese tipo de sentencias <continue>, <break>, etc. Yo cambiaría eso e implementaría el mismo comportamiento con un <bool> o <int> si no quieres usar <bool>, pero vamos, evitando sentencias de salto.
#525
Si quieres quitar líneas claro que puedes, a costa de perder legibilidad:
  • Las líneas 4, 5 y 6 las puedes poner junto a las declaraciones. (3 líneas menos)
  • Los <if> y <while> con una sola sentencia dentro, puedes quitar las llaves. (4 líneas menos)
  • Puedes cambiar un poco los incrementos. (8 líneas menos contando las 4 líneas menos anteriores)

    Ganancias en eficiencia? Ninguna
    Pérdidas en legibilidad? Muchas
    :rolleyes: :rolleyes: :rolleyes: :rolleyes:
    Si quieres ganar un poco en eficiencia lo único que te diría es que los incrementos y decrementos los hagas en prefijo <++i> es ligeramente mejor que <i++>. Pero tampoco creas que te van a mejorar los tiempos de ordenación por hacer eso.
#526
Ten en cuenta que no estás copiando los datos de <drce[indice].file_name> en <file_names_in_dir[indice]>... Lo que estás haciendo es que el puntero del array de punteros que has creado apunte al mismo lugar que el otro <char*>. Entonces si se modifica el valor de <drce[indice].file_name> antes de mostrar tu array, éste último mostrará el nuevo contenido que puede no ser lo que tú esperabas.

Y como bien dice @string Manolo, con ese trocillo de código no podemos ayudar mucho más.
Recordarte también que para que la cadena termine necesitas el caracter '\0' que igual no aparece y por eso la cadena no termina donde debería.
#527
Hay infinidad de implementaciones para un mismo algoritmo por lo que puedes poner tu implementación y así es más fácil decirte si puedes simplificarlo más. La otra opción es esperar que alguien lo tenga más simplificado y te lo mande...
Y no sé a qué te refieres con "pero sin trampa". He supuesto que es a no poner varias instrucciones en una línea para reducir el número de líneas, motivo por el cual no es muy bueno medir la simplificación de un código por su número de líneas. :-X
#528
No estoy muy familiarizado con DLLs pero te dejo este link que quizás te ayude. Está en inglés, espero que te sirva, de todas formas es un inglés fácil de entender :-X
https://stackoverflow.com/questions/4702732/the-program-cant-start-because-libgcc-s-dw2-1-dll-is-missing
#529
Programación C/C++ / Re: C sabiendo C++
7 Junio 2019, 14:15 PM
Hasta donde yo conozco exclusivo de C no ya que C++ es como una "expansión" de C, añade cosas pero no las quita. Lo que pasa es que hay cosas que en C se usan mucho y son muy típicas y en C++ existen otras formas de hacerlo.
Utilidad a bajo nivel es la misma lo que pasa es que con C te ves obligado a trabajar a más bajo nivel mientras que con C++ no tienes que hacerlo si no quieres. Al tener esta facilidad en C++ es un paso que normalmente la gente se ahorra cuando aprende. Pero si trabajas con C vas a profundizar mucho más en tus conocimientos a bajo nivel. Tampoco quiero asustar, hay muchas cosas que son como en C++ pero acabarás aprendiendo aspectos de más bajo nivel.

Si compilas como C++, al tener C++ incluido todo lo de C más lo suyo propio, si usas cosas de C++ te las dará por válidas y no sabrás que no puedes usar eso en C. A no ser claro que aprendas primero de forma teórica lo que se puede y lo que no.
A mí personalmente me ayudó mucho para diferenciar ambos lenguajes el compilar desde la Terminal de Linux, usando el comando g++ para compilar en C++ y gcc para compilar en C y te olvidas de IDEs, sólo necesitas un editor de textos y la propia Terminal.
#530
Programación C/C++ / Re: C sabiendo C++
7 Junio 2019, 13:57 PM
C++ es como una expansión de C por lo que todo lo que puedes hacer en C, lo puedes hacer en C++. Como es lógico, C++ es un "avance" por lo que tiene añadidos que facilitan algunas cosas. Por ejemplo en C olvídate de strings (debes usar <char*>), clases(debes usar <struct>), paso por referencia(tendrás que usar punteros), para usar <bool> tienes que incluir <stdbool.h> o usar <int> con valores de 0 y 1.
Al no estar orientado a objetos como C++ no tendrás cosas como:
Código (cpp) [Seleccionar]

ifstream fichero_entrada;
fichero_entrada.open("nombre_fichero.txt");

Sino que tendrás:

FILE *fichero_entrada;
fichero_entrada = fopen("nombre_fichero.txt", "r");


Y si quieres ver más diferencias puedes seguir mirando cómo se hace todo lo que haces en C++ en C. Pero asegúrate de compilar para C porque muchos comenten el error de decir que programan en C pero están compilando en C++ por lo que meten sentencias de C++ que no existen en C y no les da problemas.