++C: עוד שאלה בענייני istream

++C: עוד שאלה בענייני istream

איך אפשר לממש קריאת קלט למשתנה מסוג מחרוזת סטטית (מערך של char), כולל רווחים (כמו שמאפשר השימוש ב-cin.getline) שהתוצאה של הזנת מחרוזת ארוכה מדי תהיה קליטת מס' התווים הנחוץ בלבד, תוך התעלמות מכל מה שהוזן מעבר לכך? דוגמא:
char st1[10]; int n; cin.getline(st1, 10); cin>>n;​
אני מעוניין להזין לתוך st1 את הערך "lolla paloza", כך שמה שיקלט לתוך המחרוזת יהיה רק 10 תווים: "lolla palo", ואילו שהמשך הקלט עד ללחיצה על Enter יזרק, כך שאוכל להזין ערך לתוך האינטג'ר.
 

eyalbd

New member
תשתמש ב- cin.get

למשל כך:
#include <iostream> int main() { using namespace std; char x[11]; int n; cin.get(x, sizeof x); cin >> n; cout << x << endl; cout << n << endl; }​
 
זה עובד חלקית בלבד

אני מזין "lolla paloza" ומקבל מיד את הפלט, בלי לקלוט אינטג'ר. x מקבל "lolla palo" אבל n מקבל את הערך 2 מאי-שם.
 

eyalbd

New member
ודאי

כי זו לא דרך טובה לקלוט את הנתונים אבל זה מה שביקשת. אני הייתי משתמש בדרך אחרת עם std::string למשל
string s1, s2; int n; cin >> s1 >> s2 >> n;​
הערבוב של getline או get יחד עם << על אותה שורה מזמין צרות.
 
למעלה