Hola a todos.
El programa que pongo a continuación compila sin errores en Pelles C, pero compilando en línea de comando con gcc como siempre no deja declarar las variables si no es al principio, tiene esto alguna solución, será que el compilador de gcc es antiguo (creo tener la última versión), por las dudas estoy estudiando punteros y el próximo capítulo es memoria dinámica.-
#include <stdio.h>

int main(void){
	int i=0, tabla=0, limite=0;	

	
	printf("\n ===== Programa que muestra la tabla de multiplicar =====");
	printf("\n\n %c Que tabla desea consultar ?......:", 168);
	scanf("%d", &tabla); 
	printf("\n Ingrese el m%cximo de operaciones...:", 160);
	scanf("%d", &limite); 
	
	int _limite[limite];

	for(; i<limite; i++){
		*(_limite+i) = i*tabla;
	}
	for(i=0; i<limite; i++){
		printf("\n %2d x %2d = %2d", tabla, i, *(_limite+i));
	}
	
	printf("\n\n");
	return 0;
}
Desde ya muchas gracias por la ayuda que puedan ofrecerme.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Con límite te refieres hasta que número va a multiplicar ¿? (10 como se suele poner) ¿?

Hombre, yo lo que haría, sería con un "for" anidade en otro "for", lo de los punteros que utilizas la verdad es que yo no le encuentro la utilidad, igual que el array de enteros... Que alguien me lo explique, y corrija en lo que me equivoque.

//Tampoco entiendo el "168" y "160" en los printf :/

Un saludo ¡!
Lo que pasa es que no puedes hacer esto int _limite[limite];

para ello deberías declararlo dinamicamente y reservarlo malloc o calloc.
#include <stdio.h>
#include <stdlib.h>

int main()
{
     int i=0, tabla=0, limite=0;
 int * _limite=NULL;


    printf("\n ===== Programa que muestra la tabla de multiplicar =====");
    printf("\n\n %c Que tabla desea consultar ?......:", 168);
    scanf("%d", &tabla);
    printf("\n Ingrese el m%cximo de operaciones...:", 160);
    scanf("%d", &limite);

    _limite=malloc(limite*sizeof(int));

    for(; i<limite; i++){
        *(_limite+i) = i*tabla;
    }
    for(i=0; i<limite; i++){
        printf("\n %2d x %2d = %2d", tabla, i, *(_limite+i));
    }
    free(_limite);
    printf("\n\n");
    return 0;
}
Saludos
Imagen
Hola Baal_30
En cuanto al límite es correcta tu apreciación sólo que quiero que se ingrese por teclado.-
El array de enteros es para practicar y que los resultados no sólo salgan por la consola si no que queden guardados en el memoria.-
El 168 y 160 con los códigos ascii del signo de pregunta y la a acentuada.-

Tocayo, gracias por la ayuda, leí por allí que al compilar si le agrego "-std=c99" es la solución, voy a practicarlo.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Igual no puedes hacer esto:int _limite[limite];
para hacer eso deberias tener limite declarado antes de compilar.
usar constates.



Saludos
Imagen
Hola Daniel.
Si te réferis a un #define no lo hago por 2 cosas, en primer lugar como se lo aclaré a Baal_30 quiero que el límite se ingrese por teclado y además no veo la necesidad dado que no me compila porque tengo una versión antigua de gcc(cosa que acabo de descubrir), en Pelles C el programa funciona correctamente.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Ni en la versión mas nueva de GCC o visual estudio te va a compilar asi nt _limite[limite] :S
si limite no es constante.

Saludos
Imagen
Una opción seria definirlo así int _limite[100]; ahi ya reservas el limite. entonces puedes imprimirlos mientras limite no sea mayor de 100.

Saludos
Imagen
Hola Dani.
¿Vos corriste el programa?, te pregunto esto porque a mí me funciona perfectamente.-

Imagen


Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
No importa si corre o no. esta malo.

El compilador debe conocer el tamaño de array para reservarlo. tu código esta escribiendo/leyendo donde no debería.

deberías reservar antes. o usar memoria dinámica.
PD: como sabes que soy Daniel :)

Saludos
Imagen
Hola Dani.
En cuanto a tú teoría me desconcierta me voy a documentar.-

Imagen


Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Pino1952 escribió:Hola Dani.
En cuanto a tú teoría me desconcierta me voy a documentar.-

Imagen


Saludos.
Daniel
Hace tiempo que no toco C pero si se a lo que se refiere pink, si te fijas en el codigo de pink reserva espacio dinamicamente con malloc dando un espacio de multiplicar 0 por el tamaño en bytes del tipo Int en memoria (basicamente lo multiplica por 4). Pero el tamaño del tipo Int dependiendo de que ordenador sea puede ocupar 4 bytes, o menos, a mi me ocupa 4 y se multiplica por el tamaño del tipo para dar portabilidad y usar la memoria justa para no ocupar memoria demas lo cual estarias haciendo una chapucilla por estar desperdiciendo memoria. en el codigo de pink usa un puntero y los punteros previamente declarados necesitan que se les haya reservado memoria, si no les asignas la direccion de una variable (ya que estaria usando memoria al azar) puede dar pantallazos azules o incluso la caida del sistema, por ese caso a veces son peligrosos los punteros.

Variable = direccion de memoria reservada por el programa para almacenar datos de un cierto tipo, y dependiendo de lo que ocupe el tipo es lo que ocupara en memoria.

Puntero = variable que almacena la direccion de memoria de otra variable.

salu2
Abolición para el torneo del toro de la vega. Death to the murderers of bulls.
Los arreglos(arrays) se declara así: array[n] donde n es una constantes mayor que cero.

mira:
[Enlace externo eliminado para invitados]


Saludos
Imagen
Por alguna razón GCC permite hacer eso, aunque la verdad no me parece correcto.
creo que reserva espacio en la pila.
creo que en visual C no permitiría hacer eso.
Saludos
Imagen
Responder

Volver a “C/C++”