• 0
ExplorerXP

question about Scanf

سؤال

سلام الله عليكم

سؤال بسيط شباب !!! : هل هناك طريقة ما لمعرفة ان البفر buffer الخاص ب scanf غير فارغ ؟؟؟!!!

وحتى اوضح سؤالي اكثر اليكم هذا المثال :

من المعلوم انه عند استخدام scanf مع السلاسل strings فانه يقرأ السلسلة المدخلة من قبل المستخدم لكن اذا ادخل المستخدم عدة كلمات وفصل بينها ب مسافة فان scanf يقرا حتى اول مسافة ويتجاهل الباقي ...

فهل هناك طريقة لمعرفة انه لازال هنا دخل من المستخدم بحيث يمكنني ان اعيد القراءة حتى نهاية الدخل ؟؟؟:rolleyes:

اتمنى ان يكون سؤالي واضح ....:)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

5 إجابة على هذا السؤال .

  • 0

للاجابة على سؤالك يمكنك استخدام الشرط :

(stdin->_cnt > 1)

أو يمكن كتابة التابع التالي :

void mygetstr(char *buff)

{

char *p = buff;

fflush(stdin);

do {

 scanf("%s", p);

 p += strlen(p);

 *p++ = ' ';

} while (stdin->_cnt > 1);

*(p - 1) = '

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الطريقة الأمثل ..... انت تقوم بكتابة بمنادة الدالة التالية :

void ReadString(char *str, int len)

{

char c;

int i=0;

char* buff = str;

do

{

c = getchar();

if (c == 'r' || i == len-1)

break;

*buff++ = c;

i++;

} while (1);

*(buff - 1) = '

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

و لكن أستاذي هاني:

أيضاً الـ gets تعطي كثيراً جدا جدا من مشاكل الـ Buffer و الحل هو إستخدام

الدالة fgets و نجعل إسم الملف stdin .

و أنت أعرف مني بذلك أستاذ هاني :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هنا ك طريقة لقراءة السلسة بالفراغات بدالة scanf

scanf("%[n]",s);

ولاحظ أن السلسة s لا تسبقها علامة &

تحياتي

عبد الوهاب

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .