[C con Clase] Problema al leer datos de un documento externo al programa

Marcos Collado Martín marquitos.mcm en gmail.com
Mar Abr 17 22:43:21 CEST 2012


Hola Steven, me ha vuelto a surgir otra duda, que es tontisima pero que no
le encuentro solución :S

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:

char  cadena[30];
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?

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:
http://paste2.org/p/1983653

Muchas gracias ^^

El 16 de abril de 2012 23:25, Marcos Collado Martín <marquitos.mcm en gmail.com
> escribió:

> Oo gracias Steven, y no he usado cout porque el problema me lo pide  que
> lo haga en C :)
>
> Un saludo ^^
>
> El 16 de abril de 2012 23:15, Steven Davidson <srd4121 en njit.edu> escribió:
>
> Hola Marcos,
>>
>>
>> On 4/16/2012 4:43 PM, Marcos Collado Martín wrote:
>>
>>> Muchas gracias Steven, ya he lo he conseguido :), ahora me ha surgido
>>> otra duda, tengo que hacer una id de producto aleatoria con una
>>> letra y dos numeros.
>>> Ej: B12
>>> El caso que lo he estado intentando, y bueno te dejo el codigo que
>>> creo que se explicara mejor que yo:
>>>
>>> http://paste2.org/p/1982279
>>>
>>> En ese codigo lo que hago es a la letra darle un valor en ASCII, pero
>>> luego como lo paso a caracter?
>>>
>>>
>> En C/C++, no hay diferencia entre caracteres y sus códigos ASCII, por lo
>> que no hay conversión necesaria.
>>
>> En tu código, escribes:
>>
>> srand( time(0) );
>> letra = 65 + rand() % (90 - 65);
>>
>> que se puede escribir como,
>>
>> letra = 'A' + rand() % ('Z'-'A');
>>
>> 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.
>>
>>
>> Luego escribes,
>>
>> srand( time(0) );
>> num = 10 + rand() % 90;
>>
>> 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.
>>
>>
>> Como indicas en tu comentario del código fuente, el problema yace en esta
>> invocación:
>>
>> printf( "%i%i\n", letra, num );
>>
>> 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,
>>
>> printf( "%c%i\n", letra, num );
>>
>> 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,
>>
>> cout << letra << num << endl;
>>
>>
>> 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,
>>
>> srand( time(NULL) );
>>
>> char szIDProducto[4];
>> szIDProducto[0] = 'A' + rand() % 26;  // Hay 26 letras en inglés
>> szIDProducto[1] = '0' + rand() % 10;  // Hay 10 dígitos
>> szIDProducto[2] = '0' + rand() % 10;
>> szIDProducto[3] = 0;  // Carácter nulo indica el final de la cadena
>>
>>
>> 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,
>>
>> valor = valor_inicial + (int)( nCantidad * (rand() / (RAND_MAX+1.0)) +
>> 0.5);
>>
>> donde 'nCantidad' es la cantidad de números en el intervalo que queremos;
>> es decir,
>>
>> nCantidad = valor_final - valor_inicial;
>>
>>
>> Espero que todo esto te ayude.
>>
>>
>> Steven
>>
>>
>> ______________________________**_________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/**mailman/listinfo/cconclase_**
>> listas.conclase.net<http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net>
>> Bajas: http://listas.conclase.net/**index.php?gid=2&mnu=FAQ<http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>>
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120417/4c44fd73/attachment.html>


Más información sobre la lista de distribución Cconclase