בעיה עם שעון עצר ב- ++C

rantri

New member
בעיה עם שעון עצר ב- ++C

קיבלתי עבודה לכתוב שעון עצר שמראה שניות דקות ושעות על המסך השחור. בניתי קלאסים של שניות דקות ושעות, הדפסתי אותם על המסך וכל פעם דרסתי את ההדפסה. בשביל האפקט של השעון השתמשתי בפונקציה ()sleep . הבעייה היא שאני צריך לעשות פעולות עם השעון כמו עצירה ואיפוס והמשך. בזמן שהשעון רץ איך אני יכול לקבל קלט מהמקלדת??? יש למשהו מושג?
 

ASHY

New member
תנסה

לעשות לולאה שבתחילה תציג את השעון ובהמשכה תבדוק אם יש קלט, וחוזר חלילה... תוכל בבקשה לעלות לפה את הקוד (סיקרנת אותי
)
 

rantri

New member
הבעייה שלי ...

היא איךלקלוט קלט מהמקלדת בלי לעצור את הלולאה. למשל אם אני משתמש ב- cin הללולאה תעצור ותמתין עד שאני יכניס קלט. שמעתי על אפשרות להשתמש בפונקציה ()kbhit אבל היא רק תודיע לי שנלחץ משהו במקלדת. איך אני יכול לדעת איזה ערך נלחץ. אולי משהו מכיר פונקציה שבודקת מה יש ב buffer ?
 

ASHY

New member
אני יודע שאני לא עונה

לך אבל ממש סיקרנת אותי, תוכל לכתוב באילו סיפריה נמצאת הפקודה sleep ואיך דורסים שורה? (פקודה + סיפריה זה כל מה שאני צריך). תודה.
 

rantri

New member
--->>>

הפונקציה ()sleep נמצאת בספריה windows.h היא מקבלת ערך במילי שניות ובזמן הזה היא משהה את ריצת התכנית. בקשר לדריסת שורה אתה פשות מדפיס את התו "r\" שהוא מחזיר את הסמן לתחילת השורה ושם אתה מבצע הדפסה חדשה.
 

linuxius

New member
אחרי kbhit תעשה getch

kbhit לא מוציאה את התו מה-Buffer אז אחרי שזיהת לחיצה אתה יכול לקרוא את התו בעזרת getch
 

linuxius

New member
אחרי kbhit תעשה getch

kbhit לא מוציאה את התו מה-Buffer אז אחרי שזיהת לחיצה אתה יכול לקרוא את התו בעזרת getch
 

rantri

New member
יש בעייה עם ()getch

אני רוצה לבדוק את הערך ב- buffer ולהשוות אותו לערך מסויים, מבלי לעצור את הריצה של התוכנית ובלי להדפיס את הערך על המסך. כאשר יש קריאה ל- getch היא עוצרת את התוכנית ומדפיסה על המסך את מה שהיה ב-buffer יש למישהו עוד רעיונות? אולי בעזרת אחת המתודות של cin .
 

linuxius

New member
בגלל זה אחרי kbhit

רק אם זיהת לחיצה תוציא תו מה-Buffer אין המתנה כי אתה יודע שיש שם תו.
 

selalerer

New member
זה צריך להיראות משהו כזה:

char ch; //get system time... while(ch!=CHAR_TO_EXIT) { while(!kbhit()) { //get system time and see if enough //time has pased to move clock to next //phase. //if not, delay 100ms. if yes, move clock. } while(kbhit()) ch=getch(); }​
 
למעלה