בעיות ב getch

ilan26

New member
בעיות ב getch

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

yair24

Member
CIN לא פולט למסך...

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

ilan26

New member
מדובר ב CIN, ושלחתי קובץ

תודה על התשובה אבל אני מתכוון ל "CIN". אתה יכול לנסות בעצמך עם תוכנית של שתי שורות אני שולך לך את הקוד והוא לא פשוט. רצוי לציין שהבעיה היא אך ורק ב VC בפונקצייה MENU יש למטה פונקצייה GETCH שהיא קולטת לתוך ch, לפונקצייה הזאת קוראים מה-MAIN, והיא מחזירה את ch לתוך Chake ב-MAIN. ישנו קובץ סיפריה נוסף שצירפתי אם תירצה להריץ. ישנו גם סוג של פיתרון מאוד לא סימפתי, שרשום בשורות המבוטלות. קובץ הCPP הוא EXE2, קובץ הסיפריה הוא LIST
 

ilan26

New member
עוד הסבר

הקובץ בהודעה בהבאה הוא קובץ הסיפריה. יש בפונקצייה MENU שתי שורות שבטח לא תבינו(ואם תבינו אתם תותחים) מדובר בשורות עם ה- HANDLER השורות האילו פותרות את הבעיה ואני לא יסביר כרגע איך, אני מחפש פיתרון אחר וקצת יותר סימפתי שימו לב לתוכנית פשוטה עם אותה בעיה. main } ללא כל דיקדוקי C char ch int num ch=getch cin>>num } k
 

voguemaster

New member
מה הבעיה

קיבלת HANDLE ל-stdin בסה"כ, מה כל העניין..
אתה יודע שתוכניות חלוניות לא מקבלות CONSOLE בד"כ ולכן stdin, stdout ו- stderr לא קיימים אלא אם כן אתה מבקש אותם ספציפית (ולמה צריך אותם בכלל..) אלי
 

ilan26

New member
בנתיים אין ברירה....

זאת דרך לא נורמלית כדי להיפטר מה BUFFER אם תוריד את שתי השורות האילו התוכנית תעבוד כרגיל מלבד העובדה ש CIN ידפיס למסך את מה שקלתנו ב GETCH. וזה כבר יוצר בעיות לא נורמליות בהמשך. תאמין לי ניסיתי את כל הדרכים להיפטר מיזה.
 

voguemaster

New member
הממ

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

ilan26

New member
ומשהוא קטן\גדול

המשתנה ב MAIN שמקבל את ch הוא Chose ולא Chake כמו שרשמתי כמו כן ראיתי שאתה אוהב רשימות מקושרות אז התוכנית שלי היא בשבילך.
 

MILNI

New member
נקיון החוצץ

תנסה לנקות את ה BUFFER אחרי או לפני ה GETCH. FLUSHALL
 

yair24

Member
הרצתי את התכנית הקצרה...

הרצתי את התכנית הקצרה המצורפת בקובץ והתוצאה היתה כזאת: אם אני לוחץ על אות אז לא משנה מה קורה אחרי זה הוא מדפיס לי 0 ואם אני לוחץ על מספר אז זה בסדר.. זה מה שקורה גם אצלך? לזה התכוונת? יאיר
 

ilan26

New member
אם הבנתי נכון....

אני מתעסק פה רק עם ספרות (בקוד ASCCI כמובן) ה CIN פשוט פולט למסך את התיו סיפרה שניקלט ב GETCH אני עובד עם VC6
 

yair24

Member
לדעתי זה מה שקורה באמת...

אבל אני אבדוק שוב ורק בשביל למנוע אי הבנות ... אתה מוכן להסביר לי למה אתה מתכוון שאתה אומר הCIN פולט למסך? עד כמה שאני זוכר משיעורי C++ כשלמדתי (והרבה זמן לא השתמשתי בCOUT וב-CIN) אז עד כמה שאני זוכר CIN קולט לתוך משתנה ו-COUT פולט למסך לא? יאיר
 

yair24

Member
ואתה צודק בקשר לזה שזה...

קורה רק בVC הרצתי את זה בTC של דוס ושם זה עובד אחרת כלומר הוא לא שומר את הערך של הGETCH בוא אני אתן לך איזשהו טריק שקשור איכשהו לבעיה שלך. כשמשתמשים עם SCANF וקולטים מספר אז אפשר לעשות דבר כזה: scanf("%d %c",intvar); //blabla אתה בטח שואל למה יש פה את ה-%C אם יש פה רק משתנה אחד שהוא INTVAR אז התשובה לשאלה הזאת היא: שה%C לוקח את הENTER שנלחץ בSCANF ויש לי גם דוגמא לשימוש של זה באתר שלי תחת מדור "תוכניות" בתוכנית שנקראת (MOVIES LIST (USING CONNECTED LIST אם אתה מעוניין אתה מוזמן להיכנס לשם לעשות COPY PASTE לתוכנית הזאת ולהריץ אותה (בתקווה שהיא תרוץ כי אז עוד לא ממש ידעתי HTML ונוצרו לי טעויות בתוכניות האלה) אולי זה יתן לך עוד רעיון איך לפתור את הבעיה שלך... יאיר
 

ilan26

New member
בעיה קטנה.....

אני צריך את ה ch הזה. אני משתמש בו בהמשך
 
למעלה