Hola Steven, me ha vuelto a surgir otra duda, que es tontisima pero que no le encuentro solución :S<div><br></div><div>Lo que intento es que al final de cada "variable" por asi decirlo, deje un hueco entre ellos, que se el mismo (\t), el caso que he intentado es poner al final de la cadena \t pero no lo lee ya que entre medias hay 0s se supone no? Es decir, si yo tengo:</div>
<div><br></div><div>char  cadena[30];</div><div>si meto en la cadena "Hola"  solo me ocupa hasta la posicion 3 (0-3), entonces hasta la posicion 29 que es donde pongo el \t todo eso que son? NULL, 0? </div><div>
<br></div><div>te dejo el codigo para que lo mires y me corrigas, que seguro que se puede hacer mucho mas simple que como lo estoy haciendo yo:</div><div><a href="http://paste2.org/p/1983653">http://paste2.org/p/1983653</a>
</div><div><br></div><div>Muchas gracias ^^ </div><div><br><div class="gmail_quote">El 16 de abril de 2012 23:25, Marcos Collado Martín <span dir="ltr"><<a href="mailto:marquitos.mcm@gmail.com">marquitos.mcm@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Oo gracias Steven, y no he usado cout porque el problema me lo pide  que lo haga en C :)<div><br></div><div>Un saludo ^^</div>
<div><br><div class="gmail_quote">El 16 de abril de 2012 23:15, Steven Davidson <span dir="ltr"><<a href="mailto:srd4121@njit.edu" target="_blank">srd4121@njit.edu</a>></span> escribió:<div><div class="h5"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola Marcos,<div><br>
<br>
On 4/16/2012 4:43 PM, Marcos Collado Martín wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Muchas gracias Steven, ya he lo he conseguido :), ahora me ha surgido<br>
otra duda, tengo que hacer una id de producto aleatoria con una<br>
letra y dos numeros.<br>
Ej: B12<br>
El caso que lo he estado intentando, y bueno te dejo el codigo que<br>
creo que se explicara mejor que yo:<br>
<br>
<a href="http://paste2.org/p/1982279" target="_blank">http://paste2.org/p/1982279</a><br>
<br>
En ese codigo lo que hago es a la letra darle un valor en ASCII, pero<br>
luego como lo paso a caracter?<br>
<br>
</blockquote>
<br></div>
En C/C++, no hay diferencia entre caracteres y sus códigos ASCII, por lo que no hay conversión necesaria.<br>
<br>
En tu código, escribes:<br>
<br>
srand( time(0) );<br>
letra = 65 + rand() % (90 - 65);<br>
<br>
que se puede escribir como,<br>
<br>
letra = 'A' + rand() % ('Z'-'A');<br>
<br>
Creo que esto se entiende mejor que usando sus códigos ASCII, que te puedo asegurar que nadie los ha memorizado todos; ni falta que hace.<br>
<br>
<br>
Luego escribes,<br>
<br>
srand( time(0) );<br>
num = 10 + rand() % 90;<br>
<br>
El problema es que invocas 'srand()' más de una vez en tu programa, lo cual es incorrecto. Esta función sólo debería invocarse UNA vez en tu programa. De lo contrario, seguramente acabarás por tener unos resultados menos aleatorios de lo esperado.<br>


<br>
<br>
Como indicas en tu comentario del código fuente, el problema yace en esta invocación:<br>
<br>
printf( "%i%i\n", letra, num );<br>
<br>
Usas el especificador %i para mostrar una letra (un carácter), en lugar de %c, por lo que mostrará el código ASCII que es tal letra. Deberías escribir,<br>
<br>
printf( "%c%i\n", letra, num );<br>
<br>
Sinceramente, sugiero usar 'cout' ya que toma en cuenta el tipo de cada parámetro en lugar de tener que indicarlo tú mismo. Esto en C++, sería,<br>
<br>
cout << letra << num << endl;<br>
<br>
<br>
Quiero señalar un matiz sobre la implementación. Como vas a usar el resultado como un código para representar la identificación de un producto, sugiero que trates la información como una cadena de caracteres. Así no tienes que andar cambiando de caracteres a enteros y además puedes aceptar códigos con este formato: "L0d", es decir una letra seguida de un número de un solo dígito precedido del dígito, 0 (cero). Esto sería sencillamente,<br>


<br>
srand( time(NULL) );<br>
<br>
char szIDProducto[4];<br>
szIDProducto[0] = 'A' + rand() % 26;  // Hay 26 letras en inglés<br>
szIDProducto[1] = '0' + rand() % 10;  // Hay 10 dígitos<br>
szIDProducto[2] = '0' + rand() % 10;<br>
szIDProducto[3] = 0;  // Carácter nulo indica el final de la cadena<br>
<br>
<br>
Por cierto, el cálculo que usamos para controlar el intervalo de valores generados pseudo-aleatoriamente no es el "más correcto". Es un cálculo fácil y rápido de hacer, pero no necesariamente el mejor. Tendríamos que realizar un cambio de escala y posiblemente de desplazamiento, lo cual ya hemos hecho. El cálculo "correcto" sería el siguiente,<br>


<br>
valor = valor_inicial + (int)( nCantidad * (rand() / (RAND_MAX+1.0)) + 0.5);<br>
<br>
donde 'nCantidad' es la cantidad de números en el intervalo que queremos; es decir,<br>
<br>
nCantidad = valor_final - valor_inicial;<br>
<br>
<br>
Espero que todo esto te ayude.<div><div><br>
<br>
Steven<br>
<br>
<br>
______________________________<u></u>_________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net" target="_blank">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/<u></u>mailman/listinfo/cconclase_<u></u>listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/<u></u>index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div></div></div><br></div>
</blockquote></div><br></div>