28-10-2013, 00:12
|
|
|
|
חבר מתאריך: 14.12.09
הודעות: 9,751
|
|
אתה מתעסק פעמיים ב-i באותו משפט. זה אסור. התוצאה של זה לא מוגדרת - כל דבר יכול לקרות.
(אין לי כח להסביר בדיוק את הפרטים הטכניים. חפש בגוגל sequence point.)
מעבר לזה, אפילו אם הקוד היה חוקי הוא לא היה הגיוני, כי אתה מגדיל את i פעמיים בכל איטרציה, וזה לא מה שכתבת שאתה רוצה. הדבר הנכון לכתוב הוא for (size_t i = 0; num[i] < num[i+1]; ++i).
כשאתה כותב num[i] < num[++i] זה big no-no. כאמור, חפש sequence point להסבר מפורט. אתה יכול לראות בערך מה קורה אם תוסיף שורה בסגנון מחוץ לאחת הלולאות, סתם כך:
i=0; cout << endl << num[i] << " " << num[++i] << endl;
לי הודפס במקרה הזה הפלט הבא:
Enter 10 netural numbers between 1 to 1000:
1 2 3 4 5 6 7 8 9 10
2 2
End
GCC מתריע על זה ואומר:
prog.cpp:20:28: warning: operation on ‘i’ may be undefined [-Wsequence-point]
for(i=0 ; num[i] < num[++i] ;++i){
_____________________________________
(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס
אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
|