الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

"فكر معنا" في كيفية حل مشلكة 'n\' في Getline **

مغلق
بدأه azzoz2 في 23 يناير 2008 · 4 رد · 1,053 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

مساء الخير يا أقوى مبرمجين في الدنيا :clapping:

معنا اليوم مشكلة دخول 'n\' في getline يعني في هذا الكود مثلا

string name;
int age;
cin>>age;
getline(cin,name);

إذا أدخلت قيمة في المتغير age وضغطت enter مباشرة البرنامج ينقز أمر getline لماذا ؟؟؟

لأن getline تتعامل مع جميع الرموز مثل:

'\n'
'\t'

بعكس cin التي لاتتعامل مع هذه الرموز

المشكلة هنا أنك إذا أدخلت القيمة في المتغير age وضغطت Enter هنا getline تعتبر Enter كـ 'n\' وتدخلها في المتغير name وعلى طول البرنامج ينفذ الأمر اللي بعد getline

لكن كيف ممكن نحل المشكلة بحيث إننا نستبعد إدخال 'n\' في المتغير

ودمتم سالمين....

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 23 يناير 2008 في 17:15

#2

السلام عليكم:

cin>>age;

cin.ignore(); 

getline(cin ,name);
tvquran_6.gif

#3

السلام عليكم ,,

سؤال جميل :)

هناك دالة أعرفها في cout تسمى flush تقوم بالعمل, و لكنها غير موجودة في cin ,, مع قليل من البحث :D

void flush(istream & is)
{
is.clear();
char nextChar;
while( (nextChar = is.get()) != '\n' && nextChar != EOF)
{ }
is.clear();
}

يمكن استخدامها كالتالي :

flush(cin);

تحياتي ,,

#4

وعليكم السلام

معذرة إخواني على التأخير

الأخ arabia : الحل شبيه باستخدام ()getchar

وفعلا هو حل رائع لكن لو كان getline في أول البرنامج في هذه الحالة سوف يحذف أول حرف من النص المدخل

وهذه المشكلة يمكن حلها في البرنامج بحيث إذا كان getline بعد cin أو كان في وسط المدخلات عندها تضع ()getchar أو ()cin.ignore

لكن المشكلة لو كان مكان getline غير ثابت مرة في أول البرنامج ومرة أخرى في الوسط (مثل برامج التي تتعامل مع قواعد البيانات الغير ثابتة)

هنا تصبح مشكلة ولا بد لنا من حل يتعامل مع المشكلة سواء كان getline في أول البرنامج أو المدخلات أو في وسطها أو آخرها

الأستاذ خالد : الحل رائع لكن يطرح نفس المشكلة مع حل أخونا arabia

وهي مكان getline هل هو في أول المدخلات أم لا ؟؟؟

وأتمنى أن الفكرة وضحت .... جزاكم الله خيرا....

#5

طيب وش رايكم؟؟

لو نستخدم ()getchar ثم نقوم بعملية فحص لـchar إذا كانت 'n\' نستعمل getline بدون شروط

أما إذا كانت لا تساوي 'n\' نقوم بمدجها مع متغير string بعد الإدخال

وهذا مثال:

string name;
char select=getchar();
getline(cin,name);

if(select != '\n')
	 name=select+name;

في هذه الحالة نتعامل مع getline في أي مكان كانت.......

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…