السلام عليكم ...
لدي سؤال في لغة C أتمنى أن يكون الحل لديكم ...
لدي مصفوفة رقمية اريد عند ادخال عناصرها تجنب ادخال الحروف بحيث عند ادخال حرف للمصفوفة الرقمية يتم
عرض رسالة تخبرك ( الادخال رقمي وليس حرفي ) ويتم الادخال بشكل طبيعي لمواقع المصفوفة .
السلام عليكم ...
لدي سؤال في لغة C أتمنى أن يكون الحل لديكم ...
لدي مصفوفة رقمية اريد عند ادخال عناصرها تجنب ادخال الحروف بحيث عند ادخال حرف للمصفوفة الرقمية يتم
عرض رسالة تخبرك ( الادخال رقمي وليس حرفي ) ويتم الادخال بشكل طبيعي لمواقع المصفوفة .
شكراً أخي على مشاركتك الطيبة ...
لكي أكون واضحاً أكثر البرنامج التالي يوضح استخدام الدالة isalpha لتجنب ادخال الحروف لكن البرنامج يخرج بمجرد ادخال حرف وانا اريد ان يعرض رسالة ادخال خطا للحرف ثم يطلب منه الادخال مرة أخرى والملاحظ في البرنامج وكأن الدالة هنا ليس منها فائدة .
الكود هو :
# include<iostream.h>
# include<ctype.h>
main()
{
int a[5],i=0,x;
cout<<"Enter Valuse Of Array :";
while (i<5)
{
cin>>x;
if (isalpha(x))
{ cout<<"Input Is letter ........please Is Digit :";
continue;
}
else
{
a=x;
i++;
}
}
for(i=0;i<5;i++)
cout<<a;
}char *x;
و أيضا
isalpha(*x)
a = atoi(x)
تم تعديل هذه المشاركة بواسطة Yousof في 22 مايو 2007 في 22:47
int a[5],i=0;
char x;
cout<<"Enter Valuse Of Array :";
while(i<5)
{
cin>>x;
if (isalpha(x))
{
cout<<"Input Is letter ........please Is Digit :";
//continue;
//break;
}
else
{
a=atoi(&x);
i++;
}
}
for(i=0;i<5;i++)
cout<<a;أخي Yousof ...
أشكرك على هذا الكود ، لكن هناك رسالة تظهر تقول فيه ( صادف البرنامج مشكله ويجب إغلاقه ) ولا ادري ماهو السبب .
أخي نيزك ...
الكود الذي أعطيتني ممتاز لكن لدي سؤالين :
أولاً : لماذا أضفت & مع المتغير X يعني ماذا معنى ذلك ؟
ثانياَ : إذا ادخل المستخدم رقم مكون من جزئين مثل 23 كيف يمكن تجنب هذه المشكلة واعتباره رقم واحد يدخل في أي موقع من مواقع المصفوفة ؟
الزهرة الرقمية كتب:أخي Yousof ...أشكرك على هذا الكود ، لكن هناك رسالة تظهر تقول فيه ( صادف البرنامج مشكله ويجب إغلاقه ) ولا ادري ماهو السبب .
نسيت أن أضيف هذا الكود لك و هو يقوم بحجز الذاكره
x = new char[5];
أضيفيه بعد هذا
char *x;
أشكرك أخي يوسف على هذه المعلومة ...
لكن سؤالي إلى الآن جوابه لم يكتمل كما وضحته للأخ نيزك من حيث ادخال رقم مكون من خانتين مثل ( 12).
الأخ الفاضل ...
جرب استخدام التالى
#include <iostream.h>
#include <ctype.h>
#include <stdlib.h>
#define MAX_ARRAY 5
int getusernumber()
{
char buff[11];
int n, l;
do
{
cin.clear();
cin.getline(buff, 10);
l = cin.gcount() - 1;
for(n=0; n<l; n++)
if(!isdigit(buff[n]) && !(buff[n] == '-' && !n))
{
cout << "Input have letters... please enter digits: ";
break;
}
}
while(n != l);
return atoi(buff);
}
int main(int argc, char* argv[])
{
int a[MAX_ARRAY];
int i;
for(i=0; i<MAX_ARRAY; i++)
{
cout <<"Enter values of array Elemnt[" << i+1 << "]: ";
a = getusernumber();
}
cout <<"\n\nYour array values: ";
for(i=0; i<MAX_ARRAY; i++)
cout << a << " ";
return 0;
}شكراً
تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 25 مايو 2007 في 12:21
Nothing is impossible, the word impossible itself says that: I M - Possible
الأخ Eng.Usama El-mokadem ...
الكود الذي اعطيتني كود حقق حل للمشكلة التي كنت اعانيها منذ فترة واشكرك كثيراً على مشاركتك الطيبه والتي اتمنى ان يكون الجميع استفاد منها وكذا اشكر كل المشاركين .
لكن اتمنى كمعروف أخير ان تشرح لي كود الدالة getusernumber حتى استطيع استيعابه بشكل أكبر فهناك اشياء لم افهمها واشياء مالغرض منها مثل:
cin.clear();- cin.gcount() ماعملهما بالضبط ؟
cin.getline لماذا استخدمتها ولم تستخدم cin.get ؟
if(!isdigit(buff[n]) && buff[n] != '-') متى ينفذ هذا الشرط في أي حالة ؟
if (n != l) كذلك لم افهم متي تأتي هذه الحالة ؟
أسف إن أطلت في اسئلتي لكنني احب افهم ماذا يعمل الكود بشكل واضح ؟
الأخ الفاضل ...
ملحوظة: تم تحديث بسيط فى الكود
شكراً
تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 25 مايو 2007 في 12:35
Nothing is impossible, the word impossible itself says that: I M - Possible
برنامج الأخ اسامه أكثر من رائع ..
ان لم تفهمي البرنامج، جربي هذا و ان شاء الله ما تكون فيه أخطاء
#include <iostream.h>
#include <conio.h>
# include<ctype.h>
#define MAX 5
main()
{
char x[256];
int len;
int array[MAX];
int temp;
for(int i=0; i< 5; i++)
{
here:
cin.getline(x,256);
len = strlen(x);
for(int j=0; j<len; j++)
{
if(j == 0 && x[j] == '-')
{
j++;
continue;
}
if(!isdigit(x[j]))
{
cout<<"please enter a valid number"<<endl;
goto here;
}
}
array = atoi(x);
}
cout<<" ______________________"<<endl;
for(int i=0; i<MAX; i++)
cout<<array<<endl;
getch();
return 0;
}تم تعديل هذه المشاركة بواسطة Yousof في 25 مايو 2007 في 16:37
اقتباسأولاً : لماذا أضفت & مع المتغير X يعني ماذا معنى ذلك ؟ثانياَ : إذا ادخل المستخدم رقم مكون من جزئين مثل 23 كيف يمكن تجنب هذه المشكلة واعتباره رقم واحد يدخل في أي موقع من مواقع المصفوفة ؟
أولا : إشارة & تعطي المؤشر الذي يؤشر علي المتغير x في الذاكرة فكما تعلم نعطي الدالة (atoi(x متغير من نوع مؤشر والتي يتم تعريفها كالتالي:
cahr *x;
ولكني قمت بتعريف x من نوع حرف (char) لذلك كان يجب ان اعطي الدالة مؤشر هذا المتغير
وستلاحظ حذف هذه العلامة في الخوارزمية التي ستجيب عن سؤالك الثاني عن استخدام حرفين فما فوق حيث قمت بتعريف المؤشر على شكل مصفوفة كالتالي :
char x[4];
حيث x هو مؤشر على المصفوفة اذا لا داعي لإستخدام الرمز& معها
الثاني:
قمت بتعديل الخوارزمية السابقة بحيث بدل ان يتم تخزين المدخلات في متغير حرفي تخزن في مصفوفة أحرف
هناك امر أخر قمت بإستبدال الدالة ()isalpha "لأنها لا تعتبر الرموز مثل + وغيرها أحرف " بالدالة ()isdigit التي تتأكد من أن المتغير المعطى رقم
int a[5],i=0;
char x[4],y;
bool l=0;
cout<<"Enter Valuse Of Array :";
while(i<5)
{
cin>>x;
l=0;
for(int t=0;t<strlen(x);t++)
{
y=x[t];
if(!isdigit(y))
{
l=1;
}
}
if (l==1)
{
cout<<"Input Is letter ........please Is Digit :";
}
else
{
a=atoi(x);
i++;
}
}
for(i=0;i<5;i++)
cout<<a<<endl;تم تعديل هذه المشاركة بواسطة نيزك في 26 مايو 2007 في 10:15
الأخوة في هذا المنتدى ، اعجز عن الشكر والتقدير لكم على ماقدمتموه لي وبمشاركتكم اثبتم للمنتدى أنكم أهل له .
والذي اعتبره الأول من بين كل المنتديات العلمية .......
واتمنى قبل أن اختم هذه المشاركة ان يوضح السيد Eng.Usama متى ينفذ الأمر n! ؟
وشكراً لكم مرة أخرى
الأخ الفاضل ...
بالإشارة للمثال السابق ← ... يتم تنفيذ n! عندما تكون قيمة n تساوى صفر، وحيث أن n يشير الى موضع الحرف فى الـ buff، فعندما تكون n تساوى صفر هذا معناه أنه أول حرف، وبالتالى الشرط هو استثناء إذا كان أول رقم رمز سالب '-' وليس رقم فيتم قبوله، وذلك لإتاحة إدخال ارقام سالبة.
أى الكود (buff[n] == '-' && !n) بالضبط مثل (buff[n] == '-' && n==0)
شكراً
تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 27 مايو 2007 في 21:58
Nothing is impossible, the word impossible itself says that: I M - Possible
هذا الموضوع مغلق.