• 0
al_nagdei

كيف أحدد عدد الحروف والأرقام للمتغير

سؤال

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

 

 

احبابي الكرام

 

تعرفت على المنتدى أثناء جولاني في عالم الأنترنت بحثاً عن طريقة للتحكم بالمتغيرات 

 

منتدى أكثر من رائع وأتمنى أن موضوعي في المكان المناسب وأن القى اجابة 

 

السؤال :

 

كيف استطيع اتحكم في المتغيرات من جانب عدد الحروف او الارقام الذي ممكن أنها تأخذها بحيث أن الادخال ينتقل للمتغير التالي عند انتهاء الأول تلقائياً دون انتر وإذا انتهت كل المتغيرات المطلوب ادخالها يتوقف الكيبورد عن كتابة حروف وارقام أخرى

تم تعديل بواسطه مصطفى 36a2
add some tags
0

شارك هذا الرد


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

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

  • 0
تلقائياً دون انتر

العبارة السابقة يشار إليها بعبارة Animated input أي الدخل التفاعلي , الذي يتفاعل مع المستخدم مباشرة ..

يمكنك استخدام الدالة getch وأخواتها من مكتبة conoi.h ( غير قياسية ) للقيام بذلك

ولكن هذه الدوال تتيح التعامل مع حرف واحد بإدخاله مباشرة دون Enter ,ولكن إن كان لديك متحولات رقمية وما الى ذلك فعليك كتابة دالة خاصة بك تعتمد على getch

ولكن تذكر أنه لا مفر من وجود فاصل معين بين المتحولات , قد يكون المسافة space أو حرف ما ..

المهم أنك ستستخدم getch (تقرأ الحرف دون طباعته على الشاشة)أو getche(تقرأ الحرف وتطبعه على الشاشة) في مكان ما من برنامجك

 

والله ولي التوفيق

1

شارك هذا الرد


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

getche هي دالة تطلب من المستخدم الضغط على حرف من الكيبورد وتقوم  بطباعة هذا الحرف على الشاشة مباشرةً

جرب هذا الكود

#include<stdio.h>#include<conio.h> main(){   printf("Waiting for a character to be pressed from the keyboard to exit.");    getche();   return 0;}

الان قم بتشغيل البرنامج الناتج ستجد بأنة سيأخذ الحرف ويقوم بطباعة الناتج من دون ضغط اي زر

===============================================================

getch (كما قال الاخ  مصطفى 36a2) هي دالة تطلب من المستخدم الضغط على حرف من الكيبورد ولكنها لا تقوم  بطباعة هذا الحرف على الشاشة مباشرةً، اي على عكس getche

 

مثال على getch بلغة السي

#include<stdio.h>#include<conio.h> main(){   printf("Waiting for a character to be pressed from the keyboard to exit.\n");    getch();   return 0;}

مثال على getch بلغة السي++

#include<iostream.h>#include<conio.h> main(){   cout << "Enter a character";   getch();}
تم تعديل بواسطه THE [email protected]
0

شارك هذا الرد


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

احبابي الكرام 

getche أو getch  كلتيهما خاصة بالحروف بينما هدفي وضع القيود والتحكم في أي نوع من أنواع المتغيرات مع بقاء كافة السمات والخصائص

 

getch لو أدخلت لها رقم بتحوله لحرف

 

البرنامج التالي ربما يبين الحاجة 

#include<iostream>#include<iostream>using namespace std;int main (){	int ID;	cin>>ID;/*كيف ممكن أحط هنا شرط او دالة بحيث أنه مجرد يقوم المستخدم	 بإدخال عشرة أرقام ينتقل للمخزن التالي */		/* مع ظبط إنه ما يأخذ إلا أرقام ولا يقبل الحروف ثم يحولها لأرقام */	string name; 	getline(cin,name);	/*	كيف ممكن احط شرط او دالة بحيث إن المستخدم إذا انتهى من ادخال 	خمسة عشر حرفً يتوقف الكيبورد عن الادخال بحكم أن ه	ذا هو المخزن الأخير في البرنامج 	*/	/* والهدف العام هو التحكم بالمتغرات من جانب نوع ال	مدخلات المرفوضة والمقبولة وعددها هل هناك دول لأني حاولت للأسف لم أجد*/	return 0;}

ممكن نطبق getche على char أو string كما في المثال التالي(ممكن في أخطاء لكنه يوصل المعلومة )  لكن ما ذا عن بقية الانواع والمتغيرات

#include<iostream>#include<conio.h>#include<string>using namespace std;int main(){	cout << "enter your name (must be less then 7 letter with space ):  ";	char name[6];	string fill_name;	for (int i = 0; i <= 6; i++)	{		name[i] = getche();	    fill_name.push_back(name[i]);	}	cout << endl<<fill_name;//آخر حرف ما يطلع 	return 0;} 
0

شارك هذا الرد


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

ما رأيك في دالة setw() من المكتبة iomnip تأخذ على عدد الحروف وتتجاهل الباقي

0

شارك هذا الرد


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

الدالة setw() 

عملها أنها تبداء الطباعة من جهة اليمين في حال أنها أخذت رقماً أكبر من عدد خانات الطباعة فقط ولا علاقة لها وفي حال كان العدد أكبر تصبح عديمة الفائدة ولا علاقة لهابالتحكم في المتغيرات الاساسية وقيمها 

 

إليك مثال 

#include<iostream>#include<string>#include <iomanip>using namespace std;int main(){	cout<<setw(40)<<" test for finction setw()"<<endl;//عدد الحروف أقل من العدد الوسيط 		cout<<setw(4)<<"test for finction setw()"<<endl;//عدد الحروف أكبر من العدد الوسيط فكانها غير موجودة 		return 0;}
0

شارك هذا الرد


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

أتوقع بيعجبك هذا 

#include<iostream>#include<string>#include<iomanip>using namespace std;int main(){	 string name;	 cout<<"Enter a name (must be less than 10 letter): ";	 cin>>setw(10)>>name;	 cout<<name<<endl;	 system	("pause");	 return 0;}

:blush:  :blush:  :blush:  خذ تجربة!!

0

شارك هذا الرد


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

جميل ... :ty:

لكن جرب هذا وستعرف المشكلة  حط أرقام أكبر من 100

#include<iostream>#include<iomanip>using namespace std;int main(){int x;cin>>setw(2)>>x;cout<<x<<endl;cout<<x+10<<endl;system("pause");return 0;}

:excl:  :excl:  :excl:  :cry:

تم تعديل بواسطه al_nagdei
0

شارك هذا الرد


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

getche أو getch  كلتيهما خاصة بالحروف بينما هدفي وضع القيود والتحكم في أي نوع من أنواع المتغيرات مع بقاء كافة السمات والخصائص

ألم أخبرك أنه عليك كتابة دالة خاصة بك :)

ولكن هذه الدوال تتيح التعامل مع حرف واحد بإدخاله مباشرة دون Enter ,ولكن إن كان لديك متحولات رقمية وما الى ذلك فعليك كتابة دالة خاصة بك تعتمد على getch

هذا مثال على دخل رقمي  ينتهي عند إدخال أي حرف

#include<conio.h>//isdigit#include<ctype.h>//getche#include<stdio.h>//printfint main(){    int a=0,b;    while(isdigit(b=getche())){        a=a*10+(b-'0');    }    printf("you have entered %d\n",a);    while(1){    }    return 0;} 

وهذا مثال آخر على إدخال سلسلة نصية , تتوقف  عند إدخال أي شيء غير الحروف

#include<conio.h>//isdigit#include<ctype.h>//getche#include<stdio.h>//printfint main(){    char a[1000];    int b,index=0;    while(isalpha(b=getche())){            a[index++]=b;    }    a[index]=0;    printf("you have entered %s\n",a);    while(1){    }    return 0;} 

وهكذا ..

عليك وضع دالة لإدخال كل نوع على حدة , وتحديد الفواصل المناسبة

لا يوجد شيء جاهز تعتمد عليه ..

 

بالتوفيق

تم تعديل بواسطه مصطفى 36a2
0

شارك هذا الرد


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

ألم أخبرك أنه عليك كتابة دالة خاصة بك :)

 

 

:wub:

 

لا يوجد شيء جاهز تعتمد عليه ..

 

 

 هنا مربط الفرس

 

شكراً لك حبيبي الغالي 

 

شكراً لمشاركة الجميع

0

شارك هذا الرد


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

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

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