למה התוכנית לא פועלת?

emissary

New member
למה התוכנית לא פועלת?

include <stdio.h> void point (char a) { if (a != ´.´) { printf("%c", a); scanf("%c", &a); point (a); } } void main() { char a; scanf("%c", &a); point( a ); } התוכנית צריכה לקלוט רצף של תווים עד התו נקודה ואחרי כל קליטה של תו להדפיס אותו, ולעשות את זה בצורה רקורסיבית
 

yair24

Member
הרצתי את התוכנית

והיא קולטת תוים וכשלוחצים אנטר אז אם יש נקודה התוכנית יוצאת ומדפיסה עד לנקודה את התוים שהכנסתי. למשל YOYOBOBO.TOTO אנטר YOYOBOBO לא זה מה שאתה רוצה? יאיר
 

emissary

New member
לא :(

אני רוצה שהוא יקלוט תו וידפיס אותו וכך יעשה עש שהוא קולט נקודה.
 

yair24

Member
אם מה שאתה רוצה

זה שמיד עם הדפסת הנקודה הוא יזהה שזה נקודה ויזרוק אותך החוצה אז אתה צריך לא להשתמש בSCANF אלא בGETCHE כי SCANF מחכה ללחיצה על ENTER. יאיר
 

emissary

New member
לא :(

אני רוצה שהוא יקלוט תו וידפיס אותו וכך יעשה עש שהוא קולט נקודה.
 

אלדד27

New member
אתה משתמש בפונקציה הלא נכונה.

scanf עובדת על ה - IO buffer שיש לה, שמתבסס על הקלט שהכנסת, ואחריו לחצת ENTER. כלומר, כדי שהתוכנית שלך "תעבוד" אתה צריך להכניס תו, ללחוץ ENTER, להכניס עוד תו, ללחוץ שוב ENTER, וכך הלאה עד לנקודה. במקום scanf אתה צריך להשתמש ב - getch, ככה:
#include <conio.h> void main() { char a; a = _getch(); while (a != ´.´) { _putch(a); a = _getch(); } }​
הערה: במימוש שלי השתמשתי ב - getch_, שהיא הגרסה המייקרוסופטית ל - getch.
 

אלדד27

New member
תוספת לגבי התשובה של יאיר

ההבדל בין getch לבין getche הוא שבפונקציה השניה (getche), הפונקציה גם קולטת את התו וגם כותבת אותו על המסך. אם תשתמש ב - getche, לא תזדקק ל - putch, אבל אז גם הנקודה תוצג על המסך.
 

emissary

New member
תודה רבה, וההנ התוכנית הסופוית

#include <stdio.h> #include <conio.h> void point (char a) { if (a != ´.´) { printf("%c", a); a = getche(); point (a); } } void main() { char a; a = getche(); point( a ); }
 

אלדד27

New member
אני לא מבין למה Point קוראת לעצמה

כלומר, ברור שזה עובד, אבל אחרי מספר מסוים של תווים התוכנית שלך פשוט תעוף, כי בכל קריאה ל - point אתה תופס עוד מקום ב - stack, בלי לפנות את המקום הקודם שתפסת. או במילים אחרות, למה ברקורסיה?!
 

emissary

New member
כי למדנו רקורסיה אז המורה חייבה

לעשות עם זה, אני בכיתה יא :)
 

emissary

New member
ועוד משהוא קטן ודומה

אני אמור לקלוט רצף של תווים עד לנקודה ואז להדפיס ארותם בסדר הפוך. #include <stdio.h> #include <conio.h> void change (char *ar) { if (*ar != ´.´) { ar += 1; *ar = getche(); change (ar); printf("%c",*ar); ar -= 1; } } void main() { char *ar; *ar = getche(); change (ar); }
 

אלדד27

New member
לא טוב...

ראשית כל, אתה לא צריך את כל המשחקים עם ar. כל הפואנטה ברקורסיה היא שהפונקציות יחזרו בסדר הפוך מקריאתן, ואז מספיק שסתם תעביר את ה putch מהפתרון המקורי שלי למיקום של ה - printf שלך, וזה ידפיס הפוך; שנית, למה אתה משתמש ב printf כשיש לך putch?
 

emissary

New member
ככה?

#include <stdio.h> #include <conio.h> void change (char *ar) { if (ar != ´.´) { ar = getche(); change (ar); putch(ar); } } void main() { char ar; ar = getche(); change (ar); }
 

אלדד27

New member
כמעט

אתה לא צריך את ה - include ל - stdio, וחסר ה - putch האחרון, ב-main.
 

emissary

New member
דווקא זה מעולה תודה רבה

 

אלדד27

New member
לא מדויק,

בפתרון הרקורסיבי (ההפוך), הנקודה תודפס ראשונה. אם לא תשים את ה - Putch ב-main, התו הראשון שהקלדת לא יודפס.
 
למעלה