
Convert.ToInt32(Console.ReadLine()). אם לא ממירים, הפלוס בין מחרוזת למספר מחבר ביניהם כטקסט, ומתקבל 201 במקום 21."Your first name is " + firstName.{0} יוחלף במשתנה הראשון.{0:F2}: שתי ספרות אחרי הנקודה העשרונית.{0:C}: פורמט מטבע לפי הגדרות המחשב.{0:N}: מספר עם פסיקים לאלפים.{0:D2}: מספר שלם עם אפס מוביל, כך ש-7 יוצג כ-07.{0:E2}: פורמט מדעי.{0,5} מיישר את הערך לימין בתוך חמישה שדות, ו-{0,-5} מיישר לשמאל.הטקסט המלא של הדקות הראשונות בהרצאה «קלט מהמשתמש - User Input» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כעת אנחנו עוברים לקלט מהמשתמש מה זה אומר קלט מהמשתמש זה אומר שאותו משתמש שמשתמש בתוכנה שלנו הוא רוצה להכניס לנו נתונים לתת לנו מידע שם פרטי שם משתמש תעודת זהות סיסמה מספרים שונים כל מיני פריטי מידע שאנחנו רוצים לקלוט מהמשתמש אנחנו מעוניינים לעשות איתם כל מיני דברים
כמובן ולכן בפרטון הזה אנחנו רוצים לראות איך בעצם המשתמש יכול לתת לנו נתונים בגלל שכל המודול הזה או כל הקורס הזה בנוי על הקונסול אז אנחנו הולכים לראות איך ניתן לקבל מידע דרך הקונסול.
לדוגמה, אם היינו עובדים עם קלקולטור אז יש לנו בעצם מידע שנקלט על ידי לחיצה על לחצנים או על ידי כתיבה בתיבת טקסט. בגלל שאנחנו עובדים בקונסול הסיפור הוא קצת אחר ולמעשה הוא די פשוט.
אז באחד הסרטונים הקודמים אנחנו ראינו שכל עבודה עם ה-Console מתבצעת על ידי הפקודה Console. כאשר אנחנו רצינו להדפיס מידע, הייתה לנו את הפונקציה Console.WriteLine וכאן אנחנו בעצם כתבנו את המידע.
כאשר אנחנו רוצים לקלוט מידע מהמשתמש, אז אנחנו צריכים להשתמש עם הפונקציה ReadLine. ReadLine קולטת בעצם משפט שלם. עכשיו, חובה עלינו לקחת את המידע הזה ולשמור בתוך תא זיכרון, בכדי שהמידע שהמשתמש הכניס נשמר תמיד בתוך איזשהו אזור זיכרון, ונוכל להתעסק איתו בשלב מאוחר יותר.
אז פה אנחנו רואים שקונסול readline, אנחנו יכולים לראות את זה כתוב פה בטולטיפ, מחזירה לנו סטרינג. זאת אומרת, נקודה מאוד מאוד חשובה בנוגע לקונסול, כל דבר שהמשתמש מכניס בקונסול בסופו של דבר הוא סטרינג, כלומר הוא מידע טקסטואלי.
אפילו אם המשתמש הכניס מחרוזת שהיא בעצם מספר, אפילו אם הוא הכניס לדוגמה את הגיל שלו, עדיין מבחינת הקונסול זה מידע טקסטואלי ואנחנו יכולים להכניס אותו אך ורק לתוך משתנה מסוג סטרינג.
זה אומר שאנחנו צריכים לפתוח משתנה מסוג סטרינג. לדוגמה אם אני רוצה לקלוט את השם הפרטי של המשתמש, אז אני אפתח את הזיכרון ואני אקרא לו first name.
להזכירכם, שמות של משתנים זה משהו שהוא חייב להיות מאוד מאוד משמעותי בלי שום קיצורים. אם יש מתכנת שקורא fn ל-first name, הוא עובר על החוק של שמות משמעותיים כי fn זה לא שם מספיק משמעותי בשביל first name של משתמש.
אפילו fname לא הייתי אומר שהוא מספיק משמעותי. first name זה מספיק משמעותי בשביל להיות תא זיכרון שמחזיק שם של משתמש. אז כל מה שאנחנו צריכים לעשות זה first name שווה console.readline.
עדיף לפני זה כמובן לומר למשתמש מה אנחנו בדיוק רוצים ממנו. לדוגמה, please enter your first name. בואו נציג your first name is ונשרשר אותו עם ערך המשתנה first name.
בואו נריץ, אנחנו רואים כאן שיש לנו קודם כל הצגה של please enter your first name, ואז אנחנו רואים את המחוזת הזאת מוצגת על המסך, please enter your first name.
המשתמש עכשיו יכול להחניף את השם הפרטי שלו, לדוגמה מוישה, וללחוץ על enter, ורק אז התוכנית עוברת מהפקודה console read line, שדרך אגב זו פקודה שנחשבת Blocking Operation, כלומר פקודה שממתינה עד שיתבצע משהו, והיא ממתינה פשוט עד שהמשתמש ילחץ על Enter.
אחרי שהמשתמש לוחץ על Enter, המידע שהוכנס בקונסול נכנס למשתנה שנמצא משמאל ההשמה. זאת אומרת, ReadLine מביאה לנו את הפקודה, או יותר נכון את המידע שהמשתמש הכניס.
לחצנו Enter ואנחנו רואים Your First Name is ואת ערך המשתנה. בואו נשלים ל-Last Name גם כן, יש לנו פה משתנה Last Name, נכתוב למשתמש Please Enter Your Last Name, ונרשום Your Last Name, או נרשום פה ליתר דיוק Your Full Name is First Name, משורשר עם רווח, משורשר עם Last Name.
בואו נריץ Please Enter Your First Name, Please Enter Your Last Name, Your Full Name is Moise Cohen. בעצם מה שעשינו כאן זה בעצם קלטנו מחרוזות, אנחנו יכולים טיפה לחסוך בשורות קוד על ידי ושט הסטרינג נגדיר פה ואז מיידית יש לנו פה גם תצוגה וגם בשורה אחת אנחנו מגדירים משתנה וקולטים את הזיכרון לתוכו אבל זה לא חובה כמובן
אם רוצים לעשות קוד קצת יותר ברור אולי באמת שווה להפריד את זה. כעת מה שאני רוצה לקלוט מהמשתמש זה את הגיל שלו. גיל זה כמובן מספר אבל הקונסול מחזיר לנו רק מחוזות אז מה שאנחנו צריכים לעשות זה להגדיר קודם כל string age.
בואו נקרא לזה ageString. נגיד למשתמש please enter your age ולתוך ageString נקלוט console.readLine. בעת אנחנו יכולים להציג your age is ageString.
בואו נריץ first name last name ו-age ואנחנו רואים your age is 20. אבל מה הבעיה עם המשתמש, עם המשתנה AgeString? הבעיה היא שהטיפוס שלו זה סטרינג.
אם אנחנו רוצים לדוגמה להגיד לו Next year you'll be ולשרשר אותו עם AgeString פלוס אחד. מה בעצם יקרה אם אנחנו נריץ את זה? אז יש לנו Please enter your first name, Moishe. Please enter your last name, Cohen.
Please enter your age, זה יהיה נניח 20 ואנחנו רואים Next year you'll be 201. כמובן זאת שגיאה. מה שהמחשב עשה, הוא בעצם שירשר את המספר 1 שהכנסנו, אנחנו יכולים לראות את המספר 1 פה, עם המחרוזת h-string, מפני ש-h-string זה מחרוזת.
מחרוזת לא ניתנת לחישובים מתמטיים, אז C-Sharp משתמשת באופרטור פלוס בשביל לבצע שירשור, כלומר משתמשת בו כאופרטור של מחוזות ולא בעצם כאופרטור מתמטי בשביל לבצע חיבור.
בשביל לבצע חיבור עלינו להפוך את המשתנה הזה מסטרינג לאינטג'ר. אז בואו נעשה דבר כזה, בואו ניקח עוד משתנה int h ומיד אחרי שקיבלנו את הסטרינג אנחנו יכולים להכניס לתוך h את convert to int32 של hString.
בדיוק בסרטון של ה-Casting וה-Conversions אנחנו ראינו שאנחנו יכולים לקחת ערך מכרוזתי שאנחנו יודעים שאמור להיות בו מספר ולהפוך אותו לטיפוס אינטג'רי או כל טיפוס אחר למעשה, כמעט כל טיפוס אחר, ולהכניס אותו לתוך משתנה מתאים.
כעת אנחנו יכולים להפיק להשתמש ב-H סטרינג ולהתחיל להשתמש רק ב-H. ואז בגלל ש-H הוא אינטג'ר טהור אנחנו יכולים לבצע עליו פעולות מתמטיות. לדוגמא, הוספת 1 למשתנה.
בואו נריץ, נכניס שם פרטי "מוישה", נכניס שם משפחה "כהן", נכניס Age 20 ונראה שאכן שנה הבאה "מוישה כהן" יהיה בין 21 ולא בין 201.
במובן שאנחנו יכולים להתחיל לקצר פה שלבים ולעשות את זה טיפה יותר מקוצר. לדוגמא, בואו נוריד את המחרוזת בכלל, ניקח Int Age, נכניס לפה.
אנחנו רואים שConsol Readline מחזירה לנו בעצם מחרוזת. אנחנו לא יכולים לקחת את המחרוזת הזאת ולהכניס אותה בצורה מרומזת לתוך אג'.
אנחנו גם לא יכולים לבצע פה קאסטינג מפורש כמו שראינו בסרטון הקודם, מפני שלא ניתן לבצע המרה מפורשת בין סטרינג לאינט. ויש לנו כאן את פונקציית ההמרה הזאת, שאנחנו יכולים פשוט לשלוח את כל Console Readline להכניס את זה ישירות בתוך פונקציית ההמרה.
אז קיצרנו פה כמה שורות קוד, אבל שוב, אם זה טיפה מבלבל, אם זה טיפה too much בשורה אחת, אז הייתי באמת ממליץ, לפחות בהתחלה, לבצע את החלוקה כמו שעשיתי מלכתחילה.
אבל גם זה כמובן עובד. Console Readline מחזירה לנו את הגיל כסטרינג. convert to int 32, שזה basically Integer to Integer, ממירה את הסטרינג שהיא קיבלה מהקונסול ל"טיפוס טהור Integer", ואנחנו משתמשים לאחר מכן באינטג'ר מהתא ואילך.
בואו נריץ "מוישה כהן בן 20 שנה הבאה יהיה בן 21". אפשר לשים את הפסות בסוף ויש לנו כרגע קלט מושלם מהמשתמש. בואו נבצע דוגמה נוספת. נניח שאנחנו רוצים לקלוט מהמשתמש שלושה מספרים שלמים או מספרים עשרוניים ולהציג את הממוצע שלהם.
זאת התוכנית שאנחנו רוצים לבנות. בואו נשים בהערה את כל מה שעשינו לפני זה. ואנחנו רוצים קודם כל לומר למשתמש please enter three numbers אנחנו רוצים עכשיו לקלוט בוא נניח נתחיל עם מספרים שלמים int num1 או נקרא לזה a,b ו-c a שווה convert to int32 של console readline כאן בעצם קלטנו מספר אחד אנחנו רוצים לשכפל את זה ל-b ו-c
יש לנו פה שלושה מספרים double average שווה a ועוד b ועוד c נחלק לשלוש ולהציג average הערך ממוצע בואו נריץ אנחנו רואים please enter three numbers נכניס אחד אחד שתיים שתיים שתיים ושלוש שלוש ונקבל שהממוצע הוא שמונים ושמונה האם הממוצע הוא באמת שמונים ושמונה בואו נבצע חישוב נכניס 11 ועוד 222 ועוד 33 שווה ונקבל 266.
נחלק ב-3 ונקבל 88 ושני שליש. אנחנו רואים שזאת לא התוצאה שקיבלנו. קיבלנו די קרוב, אבל קיבלנו עיגול כלפי מטה. ופה אנחנו צריכים להיזכר בסרטון על הקאסטינג, שבו אנחנו ראינו שלפעולה מתמטית גם כן יש טיפוס.
והטיפוס שלה זה הטיפוס היותר גדול ו/או היותר מורכב מבין מרכיבי הפעולה. ואנחנו רואים שיש פה שלושה אינטג'רים, זאת אומרת שהחיבור הזה הוא אינטג'ר, לחלק לשלוש כאשר המספר שלוש זה אינטג'ר, זאת אומרת שכבר בחלוקה איבדנו את הנקודה העשרונית.
פתרון יכול להיות 3.0. 3.0 זה מספר עשרוני, מספר עשרוני הוא דאבל ולכן יש לנו פה חלוקה