שפת c

  • פותח הנושא f10
  • פורסם בתאריך

f10

New member
שפת c

אני מנסה לעשות תוכנית פשוטה של מספר פעולות חישוב. זה הולך ככה: הכנס מספר 1 ->הכנס פעולת חשבון ->הכנס מספר 2 ->תנאי בשביל לדעת איזה פעולה הכניס המשתמש. עשיתי שורה בשביל לדעת איזה פעולה הכניס המשתמש, והקומפיילר לא רושם שיש בעיות ומריץ את התוכנית, אבל הוא מדלג על הקטע של הכנסת הפעולה והולך ישר להכניס את המספר השני. למה? הנה הקוד: #include <stdio.h> float a,b, tozaa; char action; float plus(float x, float y); float minus(float x, float y); float multip(float x, float y); float fraction(float x, float y); main () {//main printf("Enter a value to a\n"); scanf("%f", &a); // a value has been entered to a printf("select an action: + - * /"); scanf("%c", &action); //an action has been selected printf("\nEnter a value to b\n"); scanf("%f", &b); //a value has been entered to b switch(action) //determine which action has been chosen {//switch case '+': tozaa=plus(a,b); break; case '-': tozaa=minus(a,b); break; case '*': tozaa=multip(a,b); break; case '/': tozaa=fraction(a,b); break; default: printf("You have chosen a wrong action.\n"); }//end of switch }//end of main //Function plus float plus(float x, float y) { return(x+y); } //Function minus float minus(float x, float y) { return(x-y); } //Function multip float multip(float x, float y) { return(x*y); } //function fraction float fraction(float x, float y) { return(x/y); }
 

f10

New member
אין לי מושג איך ליישר את הקוד לשמאל

הדגשתי את הקטעים שקשורים לפעולת חשבון ב main
 

vinney

Well-known member
יש למטה כפתורים

ולדעתי הוא קולט את הNEWLINE בתור הפעולה, כי זה מה שיש לו בבאפר. תבדוק אם הפעולה שלך מקבלת ערך 'n\'. למה אתה לא עושה אתה זה בפעולת scanf אחת? משהו כזה:
printf("\nEnter the statement...\n"); scanf("%f%c%f",&float1,&operation,&float2);​
כמובן, שצריך לפתור את בעיית הרווחים שהמשתמש יכול להכניס לך בין המספרים לסימן הפעולה, אבל את זה אני אשאיר לך
 

f10

New member
עשיתי flushall ואח"כ getchar

וזה פעל. אבל לא הבנתי למה.. (למה זה פועל עם ה flushall(); ובלי זה לא פועל? מה הflushall עושה בדיוק?)
 

vinney

Well-known member
מאפס

מרוקן את הבאפר. כשאתה עושה scanf, הוא מתחיל לפעול רק לאחר לחיצה על הENTER, אבל הscanf מעבד רק את המספרים, ולא את הNEWLINE, שנשאר בינתיים בבאפר. קריאה הבאה לscanf מבקשת ממנו לקרוא תו בודד, הוא הולך לחפש מה מתאים בקלט (דרך הבאפר), ומוצא שם את הNEWLINE. זה מקור הבעיה, FLUSHALL פותר את זה על ידי איפוס הבאפר בין הקריאות
 

f10

New member
../images/Emo41.gifאממ../images/Emo41.gif

לא ממש הבנתי את ההסבר.. כנראה בגלל 2 דברים: 1. אני לא יודע מה זה באפר 2. אני לא יודע מה זה NEWLINE ..אז לשאלות המתבקשות
: 1. מה זה באפר
2. מה זה NEWLINE
תודה מראש
 

loogal

New member
שפת C

אתם מכירים אתרי אינטרנט ללימוד שפת C? רצוי בעיברית תודה
 

DNile

New member
ממתי לכופר כמוך כל כך חשוב

ללמוד בשפת הקודש?
 

loogal

New member
זה קורס שאני צריך לקחת סמסטר הבא

והעדפתי להתעניין בזה לפני הלימודים
 

loogal

New member
זאת שפת האם שלי יותר קל לי להבין

דברים בעיברית מאשר באנגלית.......
 

vinney

Well-known member
כל הקשור לעולם התכנות, זה אנגלית

זו השפה הרשמית של התחום, וכל הספרות הכי טובה, וכל אתרי האינטרנט הקשורים, יהיו מלאים רק באנגלית. יש תרגומים כאלה ואחרים, טובים יותר או פחות, אבל עדיין, ככל שאתה מתקדם בלימודים שלך, אתה לא יכול בלי אנגלית. אז עדיף כבר להתחיל מזה וזהו.
 

DNile

New member
מה?

אפילו את התנ"ך תרגמו לעברית, מה הבעיה לתרגם גם ספרות תכנות לעברית?
 

neko

New member
שלא עושים את זה טוב?

חוצמזה, תרגום ספר גדול באופן איכותי לוקח בד"כ בסביבות השנה-שנתיים, ואם רוצים ללמוד טכנולוגיות חדשות, זה לא יעיל לחכות את הזמן הזה. אולי C תוכל ללמוד מספרים בעברית, אבל כשתרצה ללמוד ^C או מה שלא יהיה עוד כמה שנים, תאלץ לעשות את זה באנגלית - אז ממילא כדאי כבר להתרגל לקרוא הרבה טקסט ולהכיר את המונחים.
 

vinney

Well-known member
לא רק שלא עושים את זה טוב

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

DNile

New member
אז למה הם לא כתבו את זה בעברית

מלכתחילה, ורק אח"כ באנגלית????
 

DNile

New member
רציתי לראות כמה זמן יקח למישהו

לתהות לפשר השטויות שאני כותב :)
 
למעלה