Dev - C++ - ayuda para imprima los valores que se insertan

   
Vista:
Imágen de perfil de frehall

ayuda para imprima los valores que se insertan

Publicado por frehall (2 intervenciones) el 10/06/2014 04:41:24
quiero que imprima los valores que se insertan pero el ultimo siempre sale como el valor del primer contador

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
int a[3];
int b,c;
main()
{
	for (b=0;b<=3;b++)
	{
		printf("ingrese su valor\n");
		scanf("%d",&c);
		a[b]=c;
	}
	for (b=1;b<=3;b++)
	{
	printf ("su valor es:%d\n",a[b]);
    }
	getche();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp

ayuda para imprima los valores que se insertan

Publicado por vangodp (287 intervenciones) el 13/06/2014 02:40:52
estas cometiendo un error y grave!
cuando declaras un array[3] de 3 por ejemplo estas creando un array que va guardar 3 valores. cuantos valores te esta pidiendo? 4????
El bucle for lo haces así: for (b=0;b<=3;b++) sin embargo eso es un gran error.
Preste atención el por que:
Cuando creas un array que de esta forma : array[3] solo puedes guardar 3 variables.
En c/c++ y estoy seguro que en unos cuantos lenguajes mas no empiezas a contar del uno sino del cero 0.
Sino mire su bucle: b = 0 !!!
luego dices que mientras b sea menor o igual a 3 b aumenta en mas uno pero te diré el error que cometes. Si dices <= vas a parar justo en el 3 pero si iniciamos a contar desde el cero y antes he dicho que solo puedes guardar 3 variables tienes 0,1,2,3. O sea que de 0 a 3 tienes 4 asignaciones y eso es que te colas en la 4º y te metes en un espacio de memoria que no te corresponde. Lo peor es que vas y metes ahí algo corrompiendo así una memoria que no sabes ni que es ni a que programa pertenece. Ojo con eso que puedes poner en peligro todo el sistema.
lo correcto es que si declaro array[3] inicio a contar del cero pues que pare en 3 - 1 o sea el 2. Ahora tengo 0,1,2 y como ves tengo 3 variables. nunca te olvides de eso.
La prueba es que tu programa pedirá 4 letras y solo has creado espacio para 3.
El bucle correcto es así: for (b=0;b<3;b++)
Mientras b sea menor que 3 seguirá aumentando o sea que cuando sea igual no se cumplirá lo de ser menor y ya no entrara mas en el cuerpo de for.
Y otra cosa mas a señalar es que si creas un array para guardar chars por ejemplo para guardar la palabra Hola que tiene 4 letras, necesitas un array de una letra mas o sea 5 y ahora te explico el por que.
Si creo: char palabra[] = "Hola";
y luego averiguas el tamaño del array con alguna función como sizeof(palabra)/sizeof(char) te va retornar un bonito numero 5. Entonces dirás: Bueno... ¿Pero si "Hola tiene solo 4 letras"? Y te diré ¡Si lo tiene! Pero al final de una cadena de chars existe un carácter oculto que es el \0 que indica el fin de la palabra. Entonces cuando escribas "Hola", tenga presente que en memoria eso esta de la siguiente forma "Hola0".
El 0 dice que se acaba la palabra o de lo contrario como va a saber printf hasta donde debe imprimir si la memoria es una una sucesión de variables numeradas de forma ascendiente. Printf no imprime todos los espacios blancos de dicha variable. Solo imprime hasta encontrar el \0.
Si declaraste por ejemplo una cadena de 100 chars no hay que imprimir los cien si el nombre es solo Jose le sobra 96 caracteres, es el carácter 0 después de jose que dice que aun que haya 100 caracteres solo imprime hasta 0.
Nunca toques el ultimo carácter de una cadena de chars ;)
Eso no pasa en el caso de otros tipos de datos como los int, float ni otros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <conio.h> 
int a[3];
int b,c;
main() {
for (b=0;b<3;b++) {
printf("ingrese su valor\n");
scanf("%d",&c);
a[b]=c;
}
 
for (b=0;b<3;b++) {
printf ("su valor es:%d\n",a[b]);
}
getche();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar