עבור לתוכן

עזרה בתכנות בC

Featured Replies

פורסם

מישהו יודע אולי איך אפשר לכתוב בC תוכנית שמאפשרת קליטה של יותר ממקש אחד בו זמנית?

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

בתודה מראש ;)

פורסם

למה אתה מתכוון?

משהו כמו "CTRL+F1"?

אם כן, אז אין דרך לעשות את זה ב-C. זה תלוי מערכת הפעלה. טריק שעובד על דוס לאו דוקא יעבוד ב-windows או על unix. ולהיפך. שפת C לא נותנת פתרון לבעיה הזאת.

פורסם
  • מחבר

אני לא מתכוון לCTRL+F1 שאת זה דרך אגב אפשר לעשות בC...

אני מתכוון שאם רוצים ללחוץ על מקש של חץ למעלה ובאותו הזמן על המקש 'W' אז שיהיה אפשר ושלא הW יבטל את החץ למעלה....

פורסם

קודם כל, שפת C לא נותנת פתרון למקרה שבו אתה רוצה לדעת האם נלחץ CTRL+F1. זה תלוי מערכת הפעלה, וכל מערכת הפעלה עושה את זה בצורה שונה (קח את הקוד שכתבת בשביל DOS, תקמפל על Unix או ב-Visual C++ ותראה שזה לא עובד).

דבר שני, אם תגיד לי אם איזה קומפילר אתה עובד ועל איזו מערכת הפעלה, אולי אני אוכל לעזור לך במקרה ואני יודע איך אותה מערכת הפעלה פותרת את הבעיה.

פורסם
  • מחבר

כשסתם הסתכלתי בHELP של הקומפיילר ראיתי דוגמה שמאפשרת שימוש של המקשים "Ctrl, Alt, Shift" אני לא זוכר איפה זה היה אז אני לא יכול להראות לך את התוכנית עצמה...

אני משתמש בקומפיילר TCLITE והמערכת הפעלה שלי היא windows - XP Professional....

תודה רבה שאתה מנסה...

פורסם

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

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

עידכון של המערך ייעשה על ידי כך שהתוכנית שלך תשרשר פונקציה מסויימת לפסיקה מס' 9 שמופעלת בכל פעם שמקש נלחץ או נעזב.

אני לא יודע את הספציפיקציות של הפסיקה, אבל אני בטוח שאם תריץ חיפוש באינטרנט תמצא את מה שאתה מחפש.

התוכנה שלך תוכל פשוט לגשת למערך הזה, ולבדוק עבור כל תו האם הוא נלחץ או לא.

פורסם
  • מחבר

אני לא יודע מה זה "פסיקה", הכוונה היא לפונקציה? ואם כן אז מה זה "פסיקה 9"?

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

פורסם

אני ינסה להסביר לך את זה...

תיצור מערך שמייצג את כל הכפתורים במקלדת.

עכשיו כל מקש שנלחץ ירשם כ"לחוץ" במערך. ברגע שמקש מסוים נעזב הוא ירשם כ"לא לחוץ" במערך...

ואז תעשה בדיקה אם מקש X רשום כלחוץ ומקש Y רשום כלחוץ אז ככה וככה..

לדוגמה: אם חץ ימינה וחץ למעלה(בעצם אתה פונה לתאים המתאימים במערך) לחוצים אז בלה בלה בלה...

יש מבין? :)

פורסם
  • מחבר

איך אני יודע מתי המשתמש הפסיק ללחוץ על מקש ???

פורסם

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

פורסם
  • מחבר

כן אני הבנתי שזה משהו כזה אבל אני לא יודע איך אני יכול לדעת בC מתי המשתמש הפסיק ללחוץ על מקש מסוים

אבל תודה בכל זאת ;)

פורסם

את הדברים האלה, לפי מה ש TOXIGUN אמר, צריך לעשות איכשהו באסמבלי..

פורסם

עכשיו אתה רואה למה אני לא לקחתי מסלול משולב של מתמטיקה עם מדעי המחשב :)

סטודנטים כאלה יודעים יותר מתמטיקה מאשר מחשבים ;D

אוקי, עכשיו ברצינות.

הנה חלק מהאתר של הקורס אותו אני עושה עכשיו שנקרא "ארגון המחשב ושפות סף". אני מציע שתקרא ותבין את כל הפרקים לפי הסדר. יש שם פרק שלם שמסביר על שילוב תוכניות אסמבלי עם תוכניות C בסביבת העבודה של Borland, וגם פרק שלם על פסיקות.

לחץ כאן

פורסם
  • מחבר

תודה רבה אני ינסה להבין :)

פורסם

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

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

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים