אז ככה
אני אזכיר לך (אני מקווה שלא אחדש לך...) איך rand עובד. מדובר במחולל פסאודה-אקראי (כי מחשב זה מכונה דטרמיניסטית הרי), ז"א שמדובר באלגוריתם שבהנתן קלט קבוע, יתן פלט קבוע. מה עושים כדי שפלט לא יהיה קבוע, ואפילו יראה אקראי? נכון, נותנים קלט משתנה כל פעם. בגלל זה מאתחילם את srand (שזה הפונקציה שמקבלת את הקלט המדובר) עם הערך המוחזר מtime (עם NULL כפרמטר), שזה זמן מחשב נוכחי. הוא תמיד שונה, כמו שאת יכולה לתאר לעצמך (לא מאתחלים srand כל פעם, אלא פעם אחת בתוכנית, זה עוד שימוש לא נכון שעשית). כדי לגביל את הערך המוגרל, צריך לקחת את הערך המוגרל המוחזר מrand, ולעשות עליו modulo עם המספר בו את רוצה להגביל, כך תקבלי שארית חלוקה של תוצר הrand במספר המגביל שנתת, ז"א המספר יוגרל בעצם בין 0 ל1-מספר המגביל, שזה מה שאת צריכה (בהנחה שאת עושה modulo 64). לגבי NULL - זהו ערך long, בשביל char תשתמשי ב0, זה יותר נכון ויותר קריא, אבל זאת דעתי האישית, ++C עושה casting לקבועים במצבים כאלה. לילה טוב ו