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

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

بدأه al_nagdei في 12 أبريل 2014 · 9 رد · 1,781 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

 

 

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

 

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

 

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

 

السؤال :

 

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

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 13 أبريل 2014 في 19:11 — السبب: add some tags

#2
اقتباس
تلقائياً دون انتر

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

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

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

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

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

 

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

1
#3

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 M@STER في 12 أبريل 2014 في 13:42

#4

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

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 = getche();	    fill_name.push_back(name);	}	cout << endl<<fill_name;//آخر حرف ما يطلع 	return 0;}
#5

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

 إن المعلم والطبيب كلاهمــــا ... لا ينصحـان إذا همـا لم يكرمـا 


فاصبر لدائـك إن أهنت طبيبه ... واصبــر لجهلك إن جفوت معلما

#6

الدالة 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;
}
#7

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

#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:  خذ تجربة!!

 إن المعلم والطبيب كلاهمــــا ... لا ينصحـان إذا همـا لم يكرمـا 


فاصبر لدائـك إن أهنت طبيبه ... واصبــر لجهلك إن جفوت معلما

#8

جميل ... :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 في 13 أبريل 2014 في 11:19

#9
اقتباس

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

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

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

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

#include<conio.h>//isdigit
#include<ctype.h>//getche
#include<stdio.h>//printf
int 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>//printf
int 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 في 13 أبريل 2014 في 19:08

#10
مصطفى 36a2 كتب:

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

 

 

:wub:

 

مصطفى 36a2 كتب:

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

 

 

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

 

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

 

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

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

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

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

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

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