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

question about Scanf

مغلق
بدأه ExplorerXP في 14 يناير 2003 · 5 رد · 993 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

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

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

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

#2

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

(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) = '

Coding on the Cloud and for the Cloud!

My Blog

#3

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

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) = '

#4

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

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

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

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

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

#5

أكيد أخي طلال :) ..

Coding on the Cloud and for the Cloud!

My Blog

#6

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

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

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

تحياتي

عبد الوهاب

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

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