problema con ejercicio c++

B

Hola,abro este tema porque llevo ya un rato dandole vueltas a esto y no se como ponerlo para que funcione.
Supuestamente debe de pedir un numero(n) al usuario que va a indicar el tamaño del array, luego en un bucle te pide que introduzcas tantos numeros como (n) hayas introducio y finalmente te muestra los numeros.
Como esta pues no te muestra alfinal los numeros que introduciste y por mas vueltas que le doy no consigo ponerlo, a ver si me podeis echar una manita

spoiler

Y ya de paso si conoceis alguna pagina con tutoriales de c++ para tontos, os lo agradeceria mucho

SupermaN_CK

#1

http://www.programacionfacil.com/cpp/start

1 respuesta
BLZKZ

#1 eso no es c++ amigo, es c.

La libreria de entrada salida estandar de c++ es iostream no stdio :3

1 respuesta
B

A ver por partes.
#2 ahi viene todo explicado como un libro cerrado no me entero de nada XD
#3 bueno lo de c++ o c no tengo ni idea el profesor nos dice c++, y lo de la libreria da igual no?

1 respuesta
Angel89

#1 ace años q no toko esto, pero prueba a declarar el vector al principio, donde declaras los otros "int", no te muestra todos los números, pero si q te muestra el último¿?
igual esq cada vez q entra al bucle se carga el vector y lo empieza de 0.

1 respuesta
B

#5 Si pongo el vector con las demas variables asi int vector[n]; al ejecutarlo se cuelga,y lo que pasa es que una vez meto los numeros que que sea luego no me los muestra,me escupe otros numeros tipo 324593

Angel89

#1 prueba a acer lo q te e dixo, pero dando un valor por defecto a n, declara int n; y justo despues, dale un valor n=0 por ejemplo, y ya declaras el vector, estoi buskando un programa para problarlo yo mismo, pero el q yo usaba aora no me lo bpuedo bajar de ningun laoooooo

1 respuesta
BLZKZ

#4 no, no da igual. stdio = c, stdlib = c, iostream = c++

Distintas librerias, distintas implementaciones, distinta sintaxis.

1 respuesta
The-Force

Tienes que sacar la declaracion del vector del bucle pues lo estas declarando una vez por cada iteracion en ambos bucles. Vamos que lo creas y borras cada vez que metes un numero.

Ademas inicias el primer bucle en i = 1 y el segundo en 0. Pon los dos a 0
de esta manera el bucle tendra n-1 iteraciones. Si tu quieres meter 10 numeros, iras guardado y leyendo valores en el vector en las posiciones de 0 a 9.

1 respuesta
B

#7 Si lo pongo asi alfinal uno de los valores no me muesstra el que es si no que vuelve a salir un numero raro
#9 si pongo el primer bucle i=0 y por ejemplo cuando me pide n le doy al 6,el bucle se repite 7 veces y no 6
#8 bueno no lo sabia,pero el profesor nos obliga a ponerlo asi con esas librerias

2 respuestas
Angel89

#10 prueba con i=0;i=n;i++ (en el primer bucle)?¿

y ya te sale casi no¿? solo te baila el último numero¿?

1 respuesta
The-Force

#10 wat. Lo que si es seguro es que si empiezas a guardar en vector[1] hasta n-1 y luego empiezas a leer desde vector[0]... En vector[0] tu no has guardado nada.

Me vas a hacer compilarlo a ver xD

1 respuesta
B

#11 si pongo i=n el bucle nunca se acaba,puedo meter todos los numeros que quiera en el priemr bucle.
Ahoa mismo esta con i=0;i<n en los 2 bucles y lo que pasa es que si pongo que el tamaño del array es igual a 5 me deja meter 6 numeros y no 5 y luego si me devuelve los numeros que meti,pero 5 xD.osea que en el primer bucle sobra un numero

spoiler

Asi esta ahora mismo y pasa lo que he puesto arriba

#12 ahora esta como tu has dicho y ya entiendo por que salia el numero raro,es por eso de que al [0] no le asigno un valor si empiezo desde 1

The-Force

Es culpa del \n en el scanf. Eliminalo

2 1 respuesta
B

#14 ostias por fin gracias,que dios te lo pague con muchos hijos

1 respuesta
CricK

Vale no he dicho nada XD

2 respuestas
paulvandyk

#15 ¿Con qué lo estás compilando? Estaba pensando lo mismo de #16, no debería dejarte compilarlo.

1 respuesta
B

#17 No me deja compilarlo si pongo el int vector[n]; antes del int n;,si lo pongo despues si me deja

2 respuestas
The-Force

#16 Eso que decias tenia sentido. Yo no me acordaba de esas cosas. Pero a mi con gcc me compila sin error xD en c++ tendria que hacer un int *vector = new int[n]; y en c algo con malloc

#18 normal por que n no existe antes de int n;

vale encontre info sobre eso ...
http://stackoverflow.com/questions/737240/c-c-array-size-at-run-time-w-o-dynamic-allocation-is-allowed

1 respuesta
Lecherito

#18 normal, estas intentando declarar un vector con un número que desconoces, a "n" no le has dado ningún valor, así que pon la declaración del vector después de que sepas que dimensiones debe tener ese vector.

B

Creo que para pedir enteros con el scanf se utiliza el %d de Decimal (base 10), con el %i no me acuerdo lo que estas poniendo, pero bien podría ser un decimal (con coma,vaya),un negativo o algo por el estilo que haga petar o no compilar el programa. Luego el salto de línea no se que efecto tiene exactamente,pero quítalo por si acaso.

Como dato, no necesitas pulsar enter para meter un número. Si por ejemplo tienes un vector de 5 enteros y para llenarlos pones la siguiente secuencia y al llegar al último pulsas enter :
1 2 3 4 5

El bucle :

for(i=0;i<n;i++)
        scanf("%d",&vector[i]);

Lo que irá haciendo será leer el stream correspondiente al teclado las n veces que se lo pidas y meter lo que encuentre según vaya desplazando el puntero. Ten en cuenta que el scanf se salta por defecto los espacios.

edit : Aunque en cuanto a C/C++ , no se por qué se enseña todavía el C, por lo que se de estos lenguajes,el C++ y los objetos de similar o idéntica función a muchas de las funciones de C son mejores de calle.

B

ya va el programa es asi

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


int main()
 {
     int i;
     int n;
     int vector[n];
     printf("introduca el tama€o del array:\n");
     scanf("%i,",&n);
     for(i=0;i<n;i++){                     
scanf("%i",&vector[i]); } for(i=0;i<n;i++){ printf("%i\n",vector[i]); }
system("Pause"); return 0; }

ahora va ferpecto

paulvandyk

#19 Ya entiendo lo que pasa. Como el código está en C, gcc te lo compila usando la versión última C99 que permite hacer eso.

Pero en c++ no. Tienes que poner int *vector = new int[n];

Al menos con el compilador del visual c++.

PD: Ya veo que lo has encontrado en el link ese xd.

3 respuestas
The-Force

#23 Exacto no deja de ser una avance desde mi punto de vista xD pero te pierdes una introduccion a los punteros con esta pijada. O usas arrays staticos y fin

CricK

int n;
int vector[n];
scanf("%i,",&n);

Ahí n tiene un valor basura, por lo que estas declarando un vector con un número que no controlas, aunque C++ se lo trague todo xd

Debería de ser al menos así:
int n;
scanf("%i,",&n);
int vector[n];

2 1 respuesta
Lecherito

#25 gracias por leerme en #20 xDDDD, aunque parece que nadie me había leido u.u

2 respuestas
CricK

#26 jaja eso me pasa por leer rápido y en diagonal, cómo él hablaba de hacer:
int vector[n];
int n;

Pues creía que en tu mensaje te referías a intercambiar eso solo.

1 respuesta
Lecherito

Tan solo no quería darle el código mascadito y que pensara aunque sea un poquito xDD

elkaoD

#26 #27 leed ambos a #23.

1 respuesta
BLZKZ

ahora es cuando a la gente le da por leer lo que dije yo en #3 o en #8 y se deja de royos raros xD

Usuarios habituales