איפה יואבי ?

voguemaster

New member
איפה יואבי ? ../images/Emo8.gif

יואב, הנה דוגמא לשימוש ב-BREAK בשבילך, דיברתי על זה עם מישהו ונזכרתי. נראה אותך כותב את זה כמו שצריך בלי זה: "Write a C program with an interactive loop to repeatedly read two integers and print out the difference of there squares until the first input variable is equal to zero-- in which case no output should be produced?" מבין את הבעיה הלוגית כאן ? בין הקריאה של משתנים להדפסה של התוצאה אין בדיקה של תנאי הלולאה, מכאן שאין אפשרות לכתוב את זה נכון. הדרישה היא שבמידה והמשתנה יכיל 0, לא יודפס כלום. יום טוב עפיפון..
 

ke

New member
לא שאני נגד break אבל

אפשר גם בלי break. למשל:
#include <stdio.h> int main() { int a,b; while ( scanf("%d%d",&a,&b) , a != 0 ) { printf("%d - %d = %d\n",a*a,b*b,a*a-b*b); } return 1; }​
 

voguemaster

New member
זאת די רמאות

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

mulix

New member
the comma operator

Is perfectly legal C, and evaluates to the right most part of it. The original code was a bit buggy, it should´ve check the return value of scanf. Here´s another version, without the comma: #include <stdio.h> #include <stdlib.h> int main() { int a, b; while ((scanf("%d %d", &a, &b) == 2) && b) { printf("%d\n", (a * a) - (b * b)); } return EXIT_SUCCESS; } Not that there´s anything wrong with break. Or goto, for that matter, when used sanely.​
 

voguemaster

New member
יש הבדל קל

בין חוקי למה שמקובל. מה שמקובל לרוב הוא שיש תנאי כלשהו בסוגריים האלו, ולאו דווקא כל מיני פעולות אחרות. זה גם חוקי להגדיר מערכים שמתחילים מ-1 ולא מ-0 אבל אתה לא רואה אנשים שמשתמשים בזה... למה ? כי זה מסוכן וזה תוצאה של התחביר המוזר של C. כנ"ל אפשר להגיד על מערך דו מימדי שניתן להגדיר אותו בתור מצביע לטיפוס וגם בתור מצביע למצביע של טיפוס. זה בדיוק אותה הבעיה כמו עם ה-COMMA. כן, זה חוקי, אבל האם זה אומר שצריך לבלגן את הקוד ? אין צורך בכך, הסוגריים נועדו להכיל תנאי, ולדעתי צריך לשמור על חוקי האצבע האלו. מצד שני יגידו אנשים שגם CONTINUE ו-BREAK נכנסים לאותה קטגוריה. הם חוקיים אבל "מבלגנים" את הקוד (ע"י יותר מיציאה אחת מלולאה וכד´..). יש הבדל מסוים, הבדל "דק" אם תרצו: הם מסוגלים לחסוך לא מעט בלאגן בקוד, כנגד הדוגמא של יותר ממשפט אחד בתוך סוגריים של לולאת WHILE שכנראה שרק תבלגן את הקוד ולא תעזור להבנה שלו. בכל מקרה, חלק לא קטן מהספריות הטובות ביותר נכתבו עם GOTO מזדמן
 
למעלה