פורסם 2012 ביוני 513 שנים התחלתי ללמוד C לפני שבוע ומשהו ולמדתי לולאות. הקוד הבא אמור לקבל מספר ולתת את הריבוע שלו, נגיד אם שמתי 5 אז התוצאה תהיה 25. ואם הכנסתי כל תו אחר חוץ ממספר הוא יכתוב incorrect input '>http://jpg.co.il/view/4fce40fa3c0c1.jpg/"] עכשיו השאלה שלי היא למה בפעם הראשונה שאני מכניס מספר הוא לא נותן פלט? בפעם השניה הוא נותן פלט, ואז בפעם השלישית הוא כן נותן ולא מדלג כמו בפעם הראשונה. מישהו עזרה?
פורסם 2012 ביוני 513 שנים כי את התו הראשון (הספרה הראשונה במקרה שלך) הוא קורא ב-IF הראשון שלך ואם הוא מספר אז הוא ממשיך ללולאה.בלולאה הוא קורא את התו הבא - ז"א הוא לא מתייחס לתו הראשון
פורסם 2012 ביוני 513 שנים מחבר דבר ראשון תודה רבה.דבר שני אפשר לסדר את הבעייה חוץ מלשים את ה"If" אחרי הלולאה?
פורסם 2012 ביוני 513 שנים למה הדבקת את הקוד כתמונה? יכלת פשוט להדביק פה את הקוד עצמו, בתוך טג קוד (הכפתור עם ציור #).הקוד שלך פשוט מוודא שהמשתמש הכניס לפחות מספר אחד. אז אתה יכול פשוט לוותר על ה-if בכלל (כלומר לעשות רק את ה-while), ואז בתוך ה-while לספור כמה איטרציות של הלולאה התבצעו (באמצעות משתנה נוסף). אחרי הלולאה אתה יכול לבדוק אם המשתנה הזה הוא 0 או לא.
פורסם 2012 ביוני 513 שנים מחבר שמתי כתמונה כי לא הכרתי את הכפתור הזה #, תודה.ואני חושב שלא הבנתי אותך כ"כ אתה אולי יכול בבקשה לתקן את הקוד כדי שאני אראה למה התכוונת?הקוד בשביל הנוחות:#include <stdio.h>int main(){int i;if(scanf("%d", &i)<1){printf("Incorrect input.\n");return 0;}while(scanf("%d", &i)>0){printf("%d\n", i*i);}return 0;}
פורסם 2012 ביוני 513 שנים כמו שאמרתי:תעיף את ה-if (ואת הקוד שהוא מבצע) לחלוטין.צור משתנה נוסף (נגיד נקרא לו c), ותאתחל אותו ב-0.בתוך ה-while תבצע ++c.אחרי ה-while תבדוק האם c==0, ואם כן אז זה אומר שלא נקרא שום קלט - ואז תדווח על שגיאה.
פורסם 2012 ביוני 513 שנים מחבר התכוונת לזה? #include <stdio.h>int main(){int i, c=0;while(scanf("%d", &i)>0){printf("%d\n", i*i);c++;}if(c==0) printf("No input.\n");return 0;}אם כן זה עובד כאשר אני שם נגיד אות בהתחלה הוא רושם no input, אבל אם אני שם מספר ואז אות הוא מספיק את התוכנית אבל לא רושם No input.תודה.
פורסם 2012 ביוני 513 שנים אני יכול לענות על זה אבלזה משהו בסיסי בתיכנות וכדאי שתחשוב לבד למה התוכנית מתנהגת ככה
פורסם 2012 ביוני 513 שנים מחבר אחי גם אני יודע למה זה, זה בגלל שכאשר אני מכניס מספר הערך של c הוא כבר לא 0 אז מן הסתם שהוא לא יכתוב כלום אם לאחר מכן אני ישים תו שהוא לא מספר.בכל מקרה מה שאני מחפש פה זה תוכנית כזאת:1)בכל זמן שאני אכניס מספר התכנית תתן תשובה ולא תסגר.2) בכל זמן שאני אכניס כל תו אחר שהוא לא מספר, התוכנית תכתוב "No input" ושהתוכנית לא תפסק, אלא אני אוכל עוד פעם להכניס תו נוסף.
פורסם 2012 ביוני 513 שנים עכשיו קצת יותר ברור מה אתה מחפש.שים לב שאתה עושה (while(scanf(...)>0, מה שאומר שברגע שה-scanf יחזיר 0 (מה שקורה כשהקלט "לא חוקי") הלולאה תסתיים, ואתה תצא מהתכנית. במקרה שלך אתה לא רוצה שהתכנית תיפסק, אלא תמשיך לנצח, ולכן משתמשים בלולאה אינסופית. בשביל זה אתה צריך להעביר ל-while תנאי שהוא תמיד אמת, לדוגמה 1==1 או אפילו רק 1, דהיינו:while (1) { if (scanf(...)) { ... }}שחק עם זה קצת ותראה מה קורה. תנסה לבדוק מה קורה בדיוק כש-scanf נכשלת (מה קורה אם scanf נכשלת ואז אתה מנסה לבצע שוב scanf?)
פורסם 2012 ביוני 513 שנים מחבר תודה רבה על העזרה, אבל ניסיתי לעשות משהו כזה, אני חושב שזה בערך מה שהתכנוות:#include <stdio.h>main(){int i;while(1) { if(scanf("%d", &i)>0) { printf("%d\מ", i*i); } if(scanf("%d", &i)<1) { printf("Incorrect input\n"); } }return 0;}לא הבנתי, למה אם אני שם תו לא נכון התוכנה רושמת Incorrect input אינסוף פעמים?
פורסם 2012 ביוני 513 שנים קודם כל, כל פעם שאתה עושה scanf אתה קורא עוד קלט. למה אתה עושה פעמיים scanf בתוך הלולאה?חוץ מזה, scanf מנסה לקרוא מהקלט כל עוד הוא יכול. במקרה של לקרוא מספר, הוא ממשיך לקרוא עד שהוא נתקל בתו שאינו מספר, ואז הוא עוצר, כשהאות שהוא נעצר עליה עדיין מחכה להיקרא. מה יקרה כשתנסה לעשות scanf במצב הזה?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.