תרגיל ב-C

פירמה 1

New member
תרגיל ב-C../images/Emo53.gif

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

codec

New member
זה הדבר הכי מפורט שראיתי בחיים שלי

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

פירמה 1

New member
אז התחלתי ככה:

(ואגב התחלתי ללמוד רק לפני שבועיים מה זה תכנות אז בשבילי זה עוד יותר מסובך) #include <stdio.h> int main() {int selection; do{ scanf("&d",&selection); switch(selection) { case 1: break; case 2...בלה בלה break; . . default: printf("Range error\n"); break;} }while(selection!=8); return 0; } אבל כשאני מריץ את התוכנית הוא נותן לי בלי סוף את המקרה של הברירת מחדל(Range error) בלולאה אינסופית ואני לא יודע למה
 

זויברג

New member
מצאתי את הבעיה,

דבר ראשון, כשאתה מוסיף קוד להודעה, יש למטה את הכפתורים תחילת קוד וסיום קוד, זה יצמיד לך את הטקסט לצד שמאל. דבר שני, שים לב, כשאתה קורא לscanf, הביטוי צריך להיות "%d", ולא "&d", סימן ה"%" (אחוז) מסמן לפונקציה שזה ערך להחלפה. הנה הקוד המתוקן:
#include <stdio.h> int main() { int selection; do{ scanf("&d",&selection); switch(selection) { case 1: break; case 2 ...בלה בלה break; default: printf("Range error\n"); break; } } while(selection!=8); return 0; }​
 

פירמה 1

New member
תודה. ועוד משהו קטן..

2 דברים: איך אני גורם לתוכנית שכאשר אני לוחץ 8 היא תסתיים? כרגע כשניסיתי ללחוץ אז הופיעה לי ההודעה range error דבר שני, אני צריך שכאשר לוחצים על '@' התוכנית תפסיק לקבל תווים (כמו שמפורט בקובץ וורד לעיל) ותודה לכל העוזרים!
 

זויברג

New member
הסבר,

ברגע שאתה צריך לקבל גם תווים וגם מספרים, כדאי שתעבוד לקליטה CHAR במקום INT, כך תוכל לקבל גם מספרים. זה אומר, שבמקום להתחייס למספר 1 כ-1, אתה צריך לחפש אותו כ'1', שאומר התו '1' שערכו אם אני לא טועה הוא 49 בASCII. הנה, שיניתי את הקוד כך שהוא יוכל לקבל תווים, ויבדוק גם אם נלחץ התו '@'. שים לב שהחלפתי את כל המספרים בCASEים וגם בתנאי של הWHILE לתווים, כלומר הוספתי להם גרשיים בודדים:
int main(void) { char selection = 0; do { scanf("%c",&selection); switch(selection) { case '1': printf("1"); break; case '2': printf("2"); break; case '@': //...... case '8': break; default: printf("Range error - %c\n",selection); break; } } while (selection != '8'); return 0; }​
 

זויברג

New member
עוד משהו:

שים לב שהוספתי case לתו '8' עם break אחריו, ככה שswitch לא יחשיב את התו הזה כdefault ואז תקבל error range למרות שהוא יצא מהלולאה.
 

פירמה 1

New member
זה לא מה שהתכוונתי בדיוק..

התכוונתי ב"קייסים" עצמם, שהתוכנית תקבל תווים, ותדע להפסיק לקבל ברגע שיוכנס התו '@'. אני חשבתי בכיוון כזה: case 1: do{ scanf("%c",&tav); ..if ..else if else printf("Input error\n"); while (tav!='@'); { הבעייה שזה לא כ"כ עובד כמו שצריך משום מה break;
 

זויברג

New member
אני יודע,

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