C/Visual C - ayuda co esta funcion

 
Vista:
sin imagen de perfil

ayuda co esta funcion

Publicado por tiago (1 intervención) el 27/07/2014 03:10:21
hola gente tengo que escribir una funcion que saq un 4 o un 2 al azar

escribi esto:

1
2
3
4
5
6
7
8
9
10
11
12
sacar_num_azar(){
    int numero;
    int list_num[1];
    list_num[0] = 4;
    list_num[1] = 2;
    srand (time (NULL));
    numero=rand() % 2;
 
 
 
    return list_num[numero];
}


pero me saca un 4 o un 1. el 1 no se de donde lo saca el programa por que tiene guardado un dos.

si me pueden ayudar.. desde ya racias ;)
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 JuanC

ayuda co esta funcion

Publicado por JuanC (35 intervenciones) el 27/07/2014 17:28:58
1
2
3
4
int sacar_num_azar()
{
  return ((rand() % 2)+1)*2;
}

no olvides de poner randomize(); al inicio de la aplicación...

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda co esta funcion

Publicado por Capitan Kirk (97 intervenciones) el 29/07/2014 08:25:20
En C, los índices de los arrays van de 0 a N-1. En tu caso, has declarado

int list_num[1];

con lo que los índices permitidos irán de 0 a 0, es decir, el array tiene solamente un elemento, y no dos. El elemento list_num[0] te sale correcto, pero list_num[1] ya no existe. De hecho, al hacer list_num[1]=2 estás intentando escribir en una posición de memoria que ya no pertenece al array, y leer de esa posición (que, repito, no pertenece al array) te puede dar cualquier cosa. Ten en cuenta que C no comprueba los límites de los arrays cuande lees/escribes en ellos. En programas pequeños puede que este error no se manifieste o que simplemente provoque resultados erróneos, pero en programas grandes puede provocar errores muy difíciles de rastrear, o incluso provocar errores fatales del estilo de "Segmentation fault". En tu caso, simplemente declarad

int list_num[2];

con lo cual los índices legales son 0 y 1.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda co esta funcion

Publicado por Chema (234 intervenciones) el 30/07/2014 13:24:46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define RandTwice(n) (n) = (time(NULL)%2) ?4 :2
 
int main(void)
{
	int j;
	RandTwice(j);
	printf("%d", j);
 
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar