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

مشكلة في ال cin و ال cin.get ؟؟؟ ما الحل !

مغلق
بدأه (( عبدالله )) في 29 يناير 2007 · 5 رد · 821 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ...

ها انا من جديد اجيكم بمشكلة جديدة وهي ... شوفوا هذا البرنامج ؟؟

#include<iostream>
using namespace std;

int main (){

char name[100];
char sss[50];
cout<<"Enter the name 1   ";
cin >> name;

cout <<name <<endl;

cout<<"Enter the name 2   ";
cin.get(sss,49);
cout <<sss <<endl;


fflush(stdin);
getchar();
return 0;
}

اللي عرفته من خلال مذاكرتي ان الأمر cin يعتبر المسافة عبارة عن نهاية الأدخال !!!

لذلك حبيت اني اعمل برنامج يوضح لي الفرق بينه وبين cin.get

انا توقعت ان البرنامج يمشي زي الحلاوة لكن خاب ظني لذلك ها انا أأتي لكم بالمشكلة

المشكلة :::

لما يطلب مني السطر هذا ادخال الأسم

cout<<"Enter the name 1 ";

انا ادخلت الأسم هذا ssss dddd

من المعروف انه راح يخزين فقط الـ ssss ... وهذا شيء طبيعي .. وفعلاً طبع لي الأمر !!

لكن المشكلة تكمن ان الأمر الثاني وهو

cin.get(sss,49);

انتهى مفعولة وكأني لم ادخله !!؟؟؟ وانتقل البرنامج وعرض لي من خلال هذا السطر

cout<<"Enter the name 2 ";

عرض لي البرنامج هذا الأسم dddd ????

وهذا كما هو معروف ناتج النهاية لدى الأدخال الأول !!!! فما الحل ؟؟؟؟

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#2

استخدم الـ string في المكتبة <string.h>

string str;
cin>>str;

كإقتراح فقط

SCJP 5.0

#3

مرحبا أخ عبدالله ... :)

ملاحظتك في محلها , هذه الشيء يقلق الكثير ممن الذين يتعلمون ++C

يمكنك الاطلاع على هذه الصفحة التي أخذت منها البرنامج التالي للتوضيح فهي تشرح المشكلة ببساطة و تعطيك حل جيد :

و هذا هو البرنامج :

#include <iostream> 
#include <cstdio> 

using std::cin;
using std::cout;
using std::endl;

int main(void)
{
  int ch;
  char buf[ BUFSIZ ];

  cout << "Flushing input" << endl;

  while ( (ch = cin.get() ) != '\n' && ch != EOF);

  cout << "Enter some text: ";
  cout.flush();

  if ( cin.getline( buf, sizeof(buf) ) )
  {
	  cout << "You entered: " << buf << endl;
  }

  return 0;
}

تحياتي ..

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 30 يناير 2007 في 05:43

#4

اخوي malek_sa .. اولاً بارك الله فيك على المساعدة ..

والأقتراح في محله !! لكن انا ابغى اتعامل مع الأري حتى احل المشكلة واستوعب الحل اكثر ...

اخوي Khaled.Alshaya !!! والله ما ادري وش اقول لك .؟.؟.؟

الصراحة انت عقدتها اكثر !!!؟؟ مثالك محير !!! يمكن لاني مبتدأ ؟؟؟

ياليت تشرح او تشوف لي حل آخر !!! وجزاك الله خير ...

بانتظار ردود الأخوة البقية .. بارك الله فيكم جميعا ...

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

#5

مرحبا أخ عبدالله ...

الزبدة كلها في السطر التالي :

while ( (ch = cin.get() ) != '\n' && ch != EOF);

السطر التالي يقوم بقراءة ما تبقى من الحروف في محزن الكائن Cin حتى يصل إلى نهاية المخزن .

يمكنك التبسيط بكتابة التالي :

while ( cin.get() != '\n' );

هذه السطر سيقوم بالقراءة و افراغ محتويات المخزن حتى يصل إلى Enter أو ما يسمى NewLine Character فتنتهي الـ While

تحياتي.....

#6

الله يجزيك الخير اخوي خالد على التوضيح ... فعلاً لقد تم حل المشكلة ولله الحمد ...

بارك الله فيك ...واسأل الله ان ييسير علي وعليكم ما صعب علينا ..،

لا إله إلا الله محمد رسول الله عليه الصلاة والسلام

سبحانك اللهم وبحمدك اشهد ان لا إله إلا انت استغفرك واتوب اليك

سأتقن الـ ++C و
PHP إن شاء الله تعالى ...

جاري العمل على
Microsoft Sql Server و MySQL ...

 

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

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