פורסם 2005 במאי 1520 שנים שלום, כבר נשאלה שאלה דומה אך לא נענתה תשובה העונה עליה במדיוק. יש לי בעיה בקליטת משתנים.... התוכנית שלי צריכה לקלוט בשורה עד 5 משתנים עד להופעת נקודה. הבעיה היא שיש מצב שאני לא אקבל פרמטרים לכל המשתנים אלא פרמטר אחד או שניים(או יותר) כשאחריהם נקודה. אין לי מושג איך לעשות זאת.. אם משהו יוכל לעזור אני ממש אשמח... תודה רבה!!!
פורסם 2005 במאי 1520 שנים מה שצריך לעשות זה לפני שקוראים כל ערך, צריך לקרוא תו אחד ולראות אם הוא נקודה.אם כן, להפסיק לקרוא, ואם לא, אז להחזיר את אותו תו (באמצעות הפונקציה cin.putback) ולקרוא את כל הערך.בוא נניח שאתה רוצה לקרוא לתוך מערך של לכל היותר 5 אינטים (אני בטוח שתמצא דרך להתאים את הפתרון לצרכיך).אז הפתרון הוא:int inputs[5];bool done = false;int i=0;char ch;while (!done) { cin >> ch; // read one char if (ch == '.') { // If it is a dot, finish input. done = true; } else { // else, put the dot back in and read a value cin.putback(ch) cin >> inputs[i]; ++i; } // Make sure we read 5 values at most if (i == 5) done = true;}ברור?
פורסם 2005 במאי 1520 שנים מחבר המון תודה על ההתיחסות.... (דרך אגב אני בת)הבעיה שאני מעונינת לקלוט כל מיני סוגי משתנים ולא רק char ולכן זה מסבך את כל העסק...בהעניין קצת יותר מורכב ממה שהצגתי.. אז אולי ננסה לתקשר בדרך אחרת (אם יש לך זמן כמובן..)תודה רבה...
פורסם 2005 במאי 1520 שנים מחבר קראתי שוב את ההצעה שלך ועסק קצת יותר ברור... השאלה היא.. אם התוכנה לא תחכה לקלט מסוג char? כשאני כותבת: cin>>ch
פורסם 2005 במאי 1520 שנים אז זהו, שכל קלט, כולל ספרות, הוא מסוג char.כלומר, אם הקלט הוא:12 34.אז קודם כל הלולאה תקרא את התו '1' לתוך ch.התכנית תראה שזה לא נקודה, אז היא תחזיר את הערך לתוך הקלט, ותקרא אותו כמספר (כלומר 12).אח"כ היא תקרא את התו הבא כ-'3', תבין שזה לא נקודה, תחזיר את הערך פנימה ותקרא אותו כ-34.אח"כ התכנית תקרא את התו הבא, שהוא נקודה - ולכן היא תפסיק.שימי לב שהאופרטור << מדלג על רווחים, ולכן גם אם יש רווחים לפני הנקודה התכנית תפסיק.
פורסם 2005 במאי 1520 שנים מחבר המון תודה אני אנסה......מה קורה במצב שהקלט שלי הוא double ולכן יכול להופיע המספר: 6. (0.6)
פורסם 2005 במאי 1520 שנים טוב, זה כבר קצת יותר מסובך.איפה שאת מצפה ל-double, את צריכה לבדוק אם יש אחרי הנקודה ספרה או לא.כלומר, צריך לשים (בחלק שבודק אם יש נקודה):cin >> ch;if (ch == '.') { cin.get(ch); // read the next char if (ch >= '0' && ch <= '9') { // if the next char is a digit, put it and the . back cin.putback(ch); cin.putback('.'); // after putting the chars back, read the double cin >> d; } else { done = true; }} else { cin >> d;}
פורסם 2005 במאי 1620 שנים את גם תמיד יכולה לקלוט את כל השורה(cin.getline) ו"לשחק" איתה, אבל הדרך שהציעו כאן יותר טובה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.