Здравствуйте, помогите, пожалуйста, сижу и не понимаю, почему так работает. Цель забить в список числа, чтобы потом рандомно отсортировать
for(int i=0; i<10; i++)
{
i=1+rand()%10;
char str[10]={0};
itoa(i,str,10);
m_list.AddString(reinterpret_cast<LPCTSTR>(str));
}
а получается
вот так
Здравствуйте, Ray888, Вы писали:
R>Здравствуйте, помогите, пожалуйста, сижу и не понимаю, почему так работает. Цель забить в список числа, чтобы потом рандомно отсортировать
R>for(int i=0; i<10; i++)
R> {
R> i=1+rand()%10;
R> char str[10]={0};
R> itoa(i,str,10);
R> m_list.AddString(reinterpret_cast<LPCTSTR>(str));
R> }
R>а получается вот так
Пример на псевдоязыке:
// инициализация массива случайными числами
int[] array = new int[100];
for (int i = 0; i < array.Length; i++)
{
array[i] = rand() % 10;
}
Здравствуйте, Ray888, Вы писали:
R>Здравствуйте, помогите, пожалуйста, сижу и не понимаю, почему так работает. Цель забить в список числа, чтобы потом рандомно отсортировать
R>for(int i=0; i<10; i++)
R> {
R> i=1+rand()%10;
R> char str[10]={0};
R> itoa(i,str,10);
R> m_list.AddString(reinterpret_cast<LPCTSTR>(str));
R> }
Для начала — не стоит использовать счётчик цикла ещё и как хранилище случайных чисел
Здравствуйте, Ray888, Вы писали:
R>Здравствуйте, помогите, пожалуйста, сижу и не понимаю, почему так работает. Цель забить в список числа, чтобы потом рандомно отсортировать
R>for(int i=0; i<10; i++)
R> {
R> i=1+rand()%10;
R> char str[10]={0};
R> itoa(i,str,10);
R> m_list.AddString(reinterpret_cast<LPCTSTR>(str));
R> }
Косяк номер раз: счётчик цикла меняется внутри цикла.
Программа останавливается, когда очередное случайное число окажется 9.
Косяк номер два: смешиваются char и TCHAR (который, по-видимости, wchar_t — иначе бы не было нужды в касте).
Хорошо, пока числа одноразрядные, а платформа little-endian.
Число 7 записывается в массив как '7',0, 0,0, 0,0, 0,0, 0,0 — а интерпретируется как L'7', 0, 0, 0, 0
Для big-endian пара байтов '7',0 интерпретируется уже как ворд 55*256+0 = U+3700
А двузначное число 75 — '7','5', 0,0, 0,0, 0,0, 0,0 — U+3537, 0, 0, 0, 0 (либо U+3735 для big-endian).
И т.д.
Правильно — сразу использовать TCHAR:
TCHAR str[10];
_itot(1+rand()%10,str,10); // кстати, itoa/itow само дописывает концевой 0
m_list.AddString(str);