заполнить список рандомно числами
От: Ray888  
Дата: 30.09.11 19:34
Оценка:
Здравствуйте, помогите, пожалуйста, сижу и не понимаю, почему так работает. Цель забить в список числа, чтобы потом рандомно отсортировать
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));

}

а получается вот так
Re: заполнить список рандомно числами
От: xobotik Россия  
Дата: 30.09.11 19:54
Оценка:
Здравствуйте, 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; 
}
С уважением!
Re: заполнить список рандомно числами
От: andy1618 Россия  
Дата: 30.09.11 21:26
Оценка: +1
Здравствуйте, 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> }



Для начала — не стоит использовать счётчик цикла ещё и как хранилище случайных чисел
Re: заполнить список рандомно числами
От: Кодт Россия  
Дата: 02.10.11 22:06
Оценка:
Здравствуйте, 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);
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.