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 - MAFUS

#711
Suma después, no antes. Además las líneas 17, 63, 71, 81, etc. lo haces con un for.
#712
Sí, claro. En vez de
int numerosa[n];
debes poner
int *numerosa = malloc(sizeof(int) * n);

A partir de aquí puedes continuar.


Por cierto los arrays empiezan por el indice 0 y llegan hasta su tamaño-1, por tanto que empieces por el 1 y llegues hasta su tamaño máximo es erróneo.
#713
Partiendo de tu último programa he hecho que me escriba el valor devuelto por una cadena vacía ("") y me ha devuelto el valor "es_ES.UTF-8". Es así porque este es el locale de mi sistema. De seguro que si tienes bien configurado tu S.O. te devolverá el de Colombia. De todas formas lo he buscado y es "es_CO.UTF-8". Inténtalo, a lo mejor los sistemas ahora están basados en UTF8. O dale la cadena vacía.

Sobre lo que me has dicho de que no quieres darle separador de millares al int, no lo entiendo pues eso es lo que te pide el ejercicio.
#714
Es frecuente en este foro encontrarse con gente que sigue trabajando con TurboC de Borland con la líbrería conio.h y normalmente la usan para dos o tres funciones: gotoxy, getch y getche. Para los que trabajamos con Linux nos da un poco de pereza ir editando todas esas líneas para hacer el código ejecutable. Pues bien, a raíz de eso he decidido hacerme una pequeña conio para quitarme de encima susodicho trabajo y ahora quiero compartirla con vosotros.

conio.h
#ifndef CONIO_PARA_LINUX
#define CONIO_PARA_LINUX

#include <stdio.h>
#include <termios.h>

void gotoxy(int x, int y) {
    printf("\33[%d;%df", y, x);
}

static char getch_interno(int eco) {
    char c;
    struct termios old, new;
   
    tcgetattr(0, &old);
    new = old;
    new.c_lflag &= ~ICANON;
    new.c_lflag &= eco ? ECHO : ~ECHO;
    tcsetattr(0, TCSANOW, &new);
    c = getchar();
    tcsetattr(0, TCSANOW, &old);
   
    return c;
}

char getch() {
    return getch_interno(0);
}

char getche() {
    return getch_interno(1);
}

#endif
#715
Lo que he visto. Comprimo el código para poner las sentencias que generan el error cerca:
int laberint[21][66];
x0=34;
y_0=8;
laberint[x0][y_0]=0;


Obviamente laberint es escrito muy lejos de su límite.
#717
Hay bastantes cosas mal en tu código. Un array del tipo local, eso es array[dimension], no puede crearse a partir de una variable; es decir, dimensión debe ser una contante. Puede que te funcione pero eso es dependiente el compilador, en otro puede que no funcione.

Hazlo así:
int **m1 = malloc(sizeof(int*) * n);
for(int i=0; i<n; i++){
        m1[i] = malloc(sizeof(int) * n);
for(int j=0; j<n; j++){
            printf("[ %i , %i ] <- ", i, j);
scanf("%d", &m1[i][j]);
}
}


Cuando una función recibe un array multidimensional deben especificarse todas las dimensiones menos una, la que marca cuántos elementos de ese array van a existir. Esto es así porqué C necesita saber los límites de las dimensiones del dato. Por ejemplo, sea una función que reciba una tabla 5x5 de enteros su prototipo sería así:

void funcion(int tabla[][5], int n_elementos);
Se pasa el número de elementos, n_elementos, porque este puede cambiar llamada a llamada pero las dimensiones del array no. En este caso la función no devuelve nada.
#718
Para el 1: la coma decimal (o punto decimal) también se considera parte del número de dígitos cuando marcas el número mínimo de caracteres a usar. La cadena de control por tanto será "%06.3f"Por cierto, para hacer una división con decimales basta que uno de los dos números sea marcado cómo decimal con un punto decimal. Así:
float uno = 1/3.;;
Cuando C encuentra una operación matemática con dos números de diferente naturaleza siempre promociona los de menor rango al mismo tipo del mayor rango de la operación.

Para el 2: el manual dice
CitarFor some numeric conversions a radix character ("decimal point") or thousands' grouping character is used. The actual character used depends on the LC_NUMERIC part of the locale. The POSIX locale uses '.' as radix character, and does not have a grouping character. Thus,

printf("%'.2f", 1234567.89);
results in "1234567.89" in the POSIX locale, in "1234567,89" in the nl_NL locale, and in "1.234.567,89" in the da_DK locale.

Como puedes ver te marca que el apostrofe es el signo a usar para que printf imprima el separador de millares y, además, dice que depende de la configuración local.

Otra búsqueda por internet, no muy larga, indica como cambiar el comportamiento de printf si de normal no marca los millares. Para ahorrarte el trabajo te lo pongo aquí. Antes de usar printf debes cambiar la configuración local de esta forma:
setlocale(LC_NUMERIC, "");
#719
Antes de empezar a resolver tu duda hay que resolver un problema muy grave:
Creas un array a partir de una variable. Esto es un error pues depende del compilador que funcione o no. Debes usar la familia malloc para crear un array así. Pero más grave aún es que el primer array generado puede tener una dimensión negativa y eso sí es un error muy grave; haces la comprobación  de generarlo después
#720
Para qué guardas lo que has leído cuando no coincide la clave? Lo duplicarás.
Para sobreescribir un registro, espero que todos los campos sean de longitud fija, debes volver atrás el puntero del archivo tantos bytes como ocupa el registro y entonces reescribir.