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

من يقدر يساعدني بهذا البرنامج البسيط بلغة الC ..

مغلق
بدأه m4design في 19 مايو 2007 · 4 رد · 687 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هذا برنامج بسيط حاولت أطبقه ولانفع..

مثلا عندما أدخل أي مدخل يعمل الـloop !!

ياليت تدولوني على مكان الخطأ علماً بأني أستخدم Visual Studio 2005

int main()
{
	char q;

	printf("Do you want to start (Y) or (N)?\n");
	scanf("%c",&q);

	while(q = 'Y')
	{
		printf("Do you want to continue (Y) or (N)?\n");
		scanf("%c",&q);
	}

	return 0;
}

تم تعديل هذه المشاركة بواسطة m4design في 19 مايو 2007 في 16:53

#2

عرفت الخطأ كان المفروض أستخدم == بدل = لأنه يقيس القيمة..

لكن الآن فيه شيء ثاني وهو أنه بعد أن يطبع "Do you want to continue (Y) or (N)?" ينتهي البرنامج فليش مايسوي scanf قبل ذلك كما هو مكتوب؟!!

#3

المشكلة الثانية هي أنك لو دخلت Y ستبقى في الحلقة ولن تخرج إلا ب N

#4

الأخ الفاضل ...

جرب استخدام

int main(int argc, char* argv[])
{
	char q;

	do
	{
		printf("Do you want to continue (Y) or (N)? ");
		scanf("%c",&q);
		flushall();
	}
	while(q == 'y' || q == 'Y');

	return 0;
}

أو

#include <conio.h>

int main(int argc, char* argv[])
{
	char q;

	do
	{
		printf("\nDo you want to continue (Y) or (N)? ");
		q = getche();
	}
	while(q == 'y' || q == 'Y');

	return 0;
}

حيث بعد إدخالك حرف Y والضغط على Enter يتم قراءة Y ويبقى الكود التابع لـ Enter فى مخزن لوحة المفاتيح (Keyboard Buffer) فتظهر الرسالة مرة أخرى، ويقراء scanf بقايا الكود من المرة السابقة، وبالطبع لا يساوى Y فتخرج من الحلقة.

لذا أستخدام الدالة flushall بعد قراءة الحرف، يقوم بتنظيف أى بقايا فى الـ(Buffer)، أو استخدام أى من الدالتين getche أو getch، فهما يقرائان حرف بحرف، دون الحاجه للضغط على Enter، (الأولى تقرء الحرف وتطبعه على الشاشة، والثانية تقراءه فقط)

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#5
فاطمة 212 كتب:
المشكلة الثانية هي أنك لو دخلت Y ستبقى في الحلقة ولن تخرج إلا ب N

شكراً لكي أختي فاطمة..

Eng. Usama El-Mokadem كتب:
حيث بعد إدخالك حرف Y والضغط على Enter يتم قراءة Y ويبقى الكود التابع لـ Enter فى مخزن لوحة المفاتيح (Keyboard Buffer) فتظهر الرسالة مرة أخرى، ويقراء scanf بقايا الكود من المرة السابقة، وبالطبع لا يساوى Y فتخرج من الحلقة.

لذا أستخدام الدالة flushall بعد قراءة الحرف، يقوم بتنظيف أى بقايا فى الـ(Buffer)، أو استخدام أى من الدالتين getche أو getch، فهما يقرائان حرف بحرف، دون الحاجه للضغط على Enter، (الأولى تقرء الحرف وتطبعه على الشاشة، والثانية تقراءه فقط)

شكراً

ألف شكر لك أخي أسامة على التوضيح الأكثر من رائع.. أنا إستفتدت أكثر مما كنت أبحث عنه..

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

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

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

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

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

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