¿Cuál es el tamaño de un char dado?
Frecuentes
Visto 88 equipos
0
I've got a code that i cannot understand in C; char c is string, that supposed to be randomized, here is the question however, 26 is supposed to be range of values starting from 97, but it easy to understand for integer, but in case of char i have no clue what it is supposed to be
char c = (char) rand() % 26 + 97;
3 Respuestas
6
That is generating a random character. En ASCII, alphabetical characters start at 97. So, the code is taking 97, adding a random number between 0 and 25 to it, then casting it to a char
, which generates a random alphabetical character.
contestado el 28 de mayo de 14 a las 15:05
I've got it now, it generates random decimal value of a single character using ASCII table. Much appreciated! - evaldo
Minor: rand() % 26
--> random number between 0 and 25 (inclusive). - chux - Reincorporar a Monica
It is unlikely that ASCII libraries are used; more likely, Windows-1252 (or equiv) or UTF-8. For A-Z, the values are the same, but it's important to know which character set and encoding one is using and it is almost certainly not ASCII. - Tom Blodget
2
contestado el 28 de mayo de 14 a las 14:05
1
It's a bad, non-portable way to generate a random character by directly computing the código ASCII.
A better, more portable, way is to randomize the index into a table of characters. This pushes the responsibility for what code is used to represent each character into the compiler, where it belongs:
char random_char(void)
{
const char alpha[] = "abcdefghijklmnopqrstuvwxyz";
return alpha[rand() % sizeof alpha];
}
Any decent compiler will very likely inline the above.
NOTA Usar %
to range-limit the return value of rand()
is generally frowned upon, but that's not the focus here.
contestado el 28 de mayo de 14 a las 15:05
haría static
be useful here as in static const char alpha[] = "abcdefghijklmnopqrstuvwxyz";
? - chux - Reincorporar a Monica
@chux It would of course work, but I don't think it adds much benefit in practice. static
signals "I want this variable to keep its value between invocations", but here the value is const
so it's kind of moot. I expect the compiler to implementar it by moving it to the data segment, there shouldn't be any initialization overhead or such. Using static
then feels like premature optimization and overcomplicating things, to me. I might be wrong, haven't read compiler output for this case lately. - relajarse
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c or haz tu propia pregunta.
If your question is about c, please tag it c, not c# - sloth