עבור לתוכן

הכנסת מחרוזת למשתנה float ב C++

Featured Replies

פורסם

מצורף הקוד.

למשל כשאני מכניס מספר שלילי או לא שלם הלולאה מגיבה טובה, ומדפיסה שוב להכניס מספר וקולטת בהתאם. כשאני מכניס מחרוזת, זה מדפיס לי אינסוף פעמים enter a number, מבלי לחכות לקלט. כאילו שזה מדלג על ה cin. מה הבעיה פה?

פורסם

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

אתה צריך לבדוק את הערך של ()cin.fail כדי לדעת אם הקריאה האחרונה הצליחה (יש עוד כמה דברים שצריך לבדוק אבל הם לא רלוונטיים כאן). אם היא לא הצליחה אז אתה צריך לאפס את הסטטוס באמצעות ()cin.clear ואז לדלג על הדבר האחרון שהמשתמש הכניס, לדוגמה באמצעות קריאה לתוך אובייקט string זמני.

פורסם
  • מחבר

עדיין לא הולך, אולי לא הבנתי את כוונתך

פורסם

קודם תעשה clear, אחר כך תקרא לתוך temp. חוץ מזה אל תקרא לתוך []char, תקרא לתוך string.

פורסם
  • מחבר

תודה

מה הפתרון המקביל למקרה כזה בשפת C?

פורסם

ב-C משתמשים ב-scanf, שמחזירה כמה משתנים היא הצליחה לקרוא בהצלחה. אם לדוגמה היא הייתה אמורה לקרוא מספר אחד והצליחה אז היא תחזיר 1, אחרת היא תחזיר 0. בשביל לדלג על התווים הבעיתיים אפשר לעשות כזה דבר:


scanf("%*s");

ה-s% אומר לקרוא מחרוזת, אבל ה-* אומר להתעלם ממנה ולא לשמור אותה בשום משתנה.

פורסם
  • מחבר

לא ממש הבנתי איך אני אמור לעשות שימוש בערך המוחזר מ scanf

יעזור אם תרחיב עוד

נערך על-ידי א

פורסם

שמור אותו בתוך משתנה.

תבדוק אם המשתנה הזה הוא 0 או 1.

פורסם
  • מחבר

עשיתי את זה, אבל אם לא הוכנסה מחרוזת, אני צריך לעשות שוב scanf ואז למעשה המשתמש צריך להכניס שוב את המספר

פורסם

אם לא הוכנס שום קלט אז scanf (בדיוק כמו cin) מחכה עד שיהיה קלט כלשהו.

אתה צריך לעשות את זה בלולאה, בדיוק כמו שעשית עם cin.

פורסם
  • מחבר

זה מה שניסיתי לעשות

פורסם

תקרא שוב את ההודעה שלי לגבי מה עושה ה-scanf עם s*%.

פורסם
  • מחבר

קראתי, אני לא מבין איך אני משלב את זה בקוד

פורסם

אתה יודע איך לקרוא מספר מהמשתמש?

אתה יודע איך לבדוק אם הקריאה הזו הצליחה? (רמז: אמרתי לך בדיוק מה לעשות בהודעה קודמת)

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים