פורסם 2012 בנובמבר 1913 שנים שלום רב,במהלך כתיבת תוכנית, כתבתי משפט switch שעובד. מטעמי התוכנית אני רוצה לבצע בתוכנית עוד פעם את המשפט אבל משום התוכנית מדלגת עליו ולא מתייחסת למשפט. מה יכולה להיות הסיבה?
פורסם 2012 בנובמבר 1913 שנים על איזה שפה מדובר?בהרבה שפות משפט סוויטצ' לא מוכלל בסט הפקודות הבסיסי, ויש לבצע הכללה של קובץ פקודות חיצוני כלשהו.
פורסם 2012 בנובמבר 1913 שנים מחבר שפת C. פקודת ה-switch הראשונה עבדה בלי בעיות. אני פשוט רוצה את אותה אחת ישר אחרי.
פורסם 2012 בנובמבר 1913 שנים אז תעלה את הקוד שלך, לא ברורה מה הכוונה שלך סתם ככה. וגם מומלץ שתערוך את הכותרת ותוסיף לה את השפה שעליה אתה מדבר.amitbl, על איזה שפות אתה מדבר?נב. הועבר לפורום שפות עילית.
פורסם 2012 בנובמבר 1913 שנים מחבר #include <stdio.h>int main(void){ int F, X, Y, Z, G; printf("The First Format Is "); F=getchar(); switch (F) { case 'E': printf("The First Birthday Is "); scanf("%d.%d.%d", &X, &Y,&Z); break; case 'A': printf("The First Birthday Is "); scanf("%d.%d.%d", &Y, &X,&Z); break; case 'J': printf("The First Birthday Is "); scanf("%d.%d.%d", &Z, &Y,&X); break; case 'M': printf("The First Birthday Is "); scanf("%d.%d.%d", &X, &Z,&Y); break; default: printf("Error, unknown operator."); break; } G=getchar(); switch (G) { case 'A': printf("hellow"); break; } return 0;}
פורסם 2012 בנובמבר 1913 שנים מי אמר שהוא דילג על ה switch השני? תזכורת ש getchar קוראת את התו הבא בלי לדלג על רווחים וירידות שורה.להבא, מומלץ שתנסה לדבג את התכנית שלך צעד אחר צעד כדי שתבין מה קורה בדיוק.
פורסם 2012 בנובמבר 1913 שנים מחבר לא הבנתי...נאמר כשאני מכניס printf כלשהו לפני ה-switch השני - המשפט מודפס (לאחר שבוצע ה-switch הראשון) ואז התוכנית פשוט מפסיקה. לא נותנת לי את הקלט כמו של ה-switch הראשון.
פורסם 2012 בנובמבר 1913 שנים התכנית מפסיקה או מסתיימת? שוב, לפי מה החלטת שהתכנית לא נכנסה ל switch השני?אני מציע לך להוסיף ל switch השני default ותראה מה קורה.
פורסם 2012 בנובמבר 1913 שנים מחבר מסתיימת. אני מבין שהמשפט השני לא עובד כי הוא לא נותן לי אפשרות להקליד שוב פעם תו, כמו בפעם הראשונה. הוא מדפיס לי את המשפט שלפני ה-switch השני ועוצר. הנה הקוד שוב עם ה-printf: #include <stdio.h>int main(void){ int X, Y, Z; char G, F; printf("The First Format Is "); scanf("%c", &F); switch (F) { case 'E': printf("The First Birthday Is "); scanf("%d.%d.%d", &X, &Y,&Z); break; case 'A': printf("The First Birthday Is "); scanf("%d.%d.%d", &Y, &X,&Z); break; case 'J': printf("The First Birthday Is "); scanf("%d.%d.%d", &Z, &Y,&X); break; case 'M': printf("The First Birthday Is "); scanf("%d.%d.%d", &X, &Z,&Y); break; default: printf("Error, unknown operator."); break; } printf("The Second Format Is "); scanf("%c", &G); switch (G) { case 'A': printf("hellow"); break; } return 0;}
פורסם 2012 בנובמבר 1913 שנים מחבר כשאני מוסיף deafult הוא מדפיס לי אותו. אני לא מבין למה את זה הוא קולט כאשר הוא בכלל לא נותן לי להכניס תו.
פורסם 2012 בנובמבר 1913 שנים כפי שהסבירו פה getchar קולט גם תווים מפסיקים כלומר מה שיקרה תמיד זה שהוא יקלוט את התו הראשון.לאחר מכן התו השני יהיה תו מפסיק(לחצת אנטר על מנת שהוא יקלוט את התו הראשון) ולכן הוא יודפס רק עם יש default(הוא נכנס לswitch אבל מכיוון שהוא לא a לא תראה כלום).
פורסם 2012 בנובמבר 1913 שנים בגלל האופן שבו פועלות scanf ו-getchar.אני מניח שאחרי שאתה מכניס את התאריך, אתה לוחץ על אנטר, כן? אז האנטר הזה הוא תו מיוחד בשם line feed, ומסומן כ-'n\' (ב-windows זה למעשה שני תווים - 'r\' ואחריו 'n\' - אבל נניח לשם הנוחות שזה רק תו אחד).כשאתה עושה (scanf("%d", &x אז הפונקציה קוראת מהקלט מספר עד שהיא מגיעה לתו שאינו ספרה. אם לדוגמה רשמת 12 ואחר כך אנטר, אז הקלט יכיל את התווים 1, 2 ואחר כך 'n\'. לכן הפונקציה תקרא 12 ולאחר מכן תראה את התו 'n\' שאינו ספרה, ולא תקרא אותו.הפונקציה getchar פשוט קוראת את התו הבא מהקלט ומחזירה אותו. במקרה הזה, התו הזה הוא אותו 'n\', ולכן היא תקרא אותו. הפונקציה לא מדלגת על רווחים.הפתרון הוא לעשות כזה דבר:scanf(" %c", &G);שים לב שיש רווח לפני ה-c%. הרווח הזה אומר לפונקציה לדלג על רווחים (וטאבים, וירידות שורה) אז שהיא נתקלת בתו שאינו רווח, וה-c% אומר לקרוא את התו הזה לתוך G. אופציה נוספת היא כמובן לממש את זה בעצמך באמצעות לולאה (כל עוד התו שאתה קורא הוא רווח, להמשיך לקרוא עוד תווים).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.