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

#991
Si intentas ejecutar esa función dentro de otra que se haya definido antes que esa verás que no la va a reconocer.

Una función es como una variable: solo puede usarse dentro del ámbito donde, almenos, se ha declarado su firma.

Si estás aprendiendo con el libro de K&R, que es una buena lectura, depués tendrás que actualizarte para el estándar C11, han cambiado muchaa cosas desde entonces hasta ahora.
#992
car no puede ser nunca menor a A y mayor a Z al mismo tiempo, es como decir que un número es menor a 0 y mayor a 10 al mismo tiempo. Eso está mal.
#993
Programación C/C++ / Re: necesito informacion
12 Diciembre 2016, 23:47 PM
Si vas a meterte a programar para Linux te recomiendo el libro The Linux Programming Interface.

C es solo una herramienta y hay que aprender otras técnicas para usarla bien. Este libro es bastante bueno: http://www.lcc.uma.es/~av/Libro/

Por otra parte C puede hacer muchas cosas que de primeras no cabría esperar. En inglés. Metaprogramación: http://www.chiark.greenend.org.uk/~sgtatham/mp/
#994
Lo que quiere decir engel lex es que b es un double y esto hace promocionar a a a double, por tanto el resultado de la división es un valor double. Este resultado, un double, pasa a ser operando del módulo, pero el operador módulo en C solo acepta enteros.
#995
Correcto, me faltaron los paréntesis.
#996
En realidad C solo obvia la primera dimensión y transforma la firma a void leerMediciones(int *m[5])

Si por el contrario la firma fuese void leerMediciones int **m) y la se llama a la función pasando un array bidimensional el compilador informará de dos avisos:

c.c: In function 'main':
c.c:13:20: warning: passing argument 1 of 'leerMediciones' from incompatible pointer type [-Wincompatible-pointer-types]
     leerMediciones(m);
                    ^

c.c:6:6: note: expected 'int **' but argument is of type 'int (*)[5]'
void leerMediciones(int **m) {
      ^
#997
Las matrices deben ser reales, los indices para recorrerlas enteros.
#998
La línea 134 es la culpable. Vuelves a adquirir una zona de memoria para esa variable perdiendo la que tenía los datos cargados.
#999
Como dice avesudra se suelen usar los makefile para compilar los archivos, pero en proyectos grandes hay makefiles que llaman a otros makefiles que son los encargados de realizar el trabajo. Puede llegar a ser tan complicado un makefile (es una ironía bastante buena ya que los makefiles sirven para simplificar el compilado) que existen generadores de archivos makefiles, como automake.

Como ves la cosa se puede llegar a complicar bastante. Empieza con compilando un archivo con multiples cabeceras y fuentes. Cuándo sepas manejar el compilador pásate a make. A partir de aquí ve aumentando la complejidad a medida que lo necesites.
#1000
Existe una posibilidad, pero solo te sirve para cuándo das los datos a los arrays durante la definición. En caso contrario deberás darlo uno a uno.
Estándar C >= C99

#include<stdio.h>

typedef struct{
int hogares;
float ingresosA[5];
float ingresosB[5];
float promedioA[5];
float promedioB[5];
float desviacionA[5];
float desviacionB[5];
float varianzaA[5];
float varianzaB[5];
} anno;

int main(void) {
   anno doce = {.ingresosA = {895, 789, 8745, 258, 4897}};

    /********************************************************************************
    Una definición posterior podría ser escrita así:

    doce = (anno) {.ingresosA = {895, 789, 8745, 258, 4897}};

    pero sigue sirviendo para una inicialización de la estructura completa.
    para inicializar un bloque posterior se debe hacer valor por valor.
    *********************************************************************************/
   
   for(int i = 0; i < 5; ++i)
       printf("%.0f\n", doce.ingresosA[i]);
}