• 0
العُبد

إلزام الuser بإدخال بيانات من نفس النمط المطلوب

سؤال

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

1. أريد أن أعرف هل من الممكن إلزام الuser بإدخال بيانات معينة تطابق بحيث مثلاً لو أعطيت اليوزر

int length;

وقلت له

cin >> length;

بعد هذا اليوزر قام أدخل لي بدل الint أدخل حروف string

الكل طبعاً يعرف ايش مصير هذا البرنامج بعد ما يضعظ Enter بلوحة المفاتيح

لذلك أتمنى أحد أن يجيبني ما هو الكود المطلوب لحصر

هل معقولة يجب وضع جميع الحروف في دالة شرطية

if( length == a || length == b .....إلخ )

وحتى لو تم عمل مثل هذه الدالة ستظهر نفس المشكلة

فالرجاء من الأخوة أصحاب الخبرة إعطائنا نبذة عن هذا الموضوع.

شاكرين ومقدرين :wub:

0

شارك هذا الرد


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

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

  • 0

السلام عليكم.

هناك طريقة بسيطة

تعتمد على ادخال نص ثم اختبارة وتحويله بعد ذلك الى رقم.

وهذا كود التحويل فقط.


#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
int main()
{
string str;
const char *a=str.c_str();
cout<<"Enter Number:";
cin>>str;
cout<<atoi(a)*2;


return 0 ;
}

0

شارك هذا الرد


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

وهذه دالة تختبر ثم تحول


int strint_to_int(string str)
{
const char *a=str.c_str();
for(int i=0;i<str.length();i++ )
if( !(isdigit(str[i])) )
return -1;
return (atoi ( a));
}

0

شارك هذا الرد


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

جميل .. لكن لم أفهم الكود جيداً ممكن توضح لي من وين اجا

str.length()

str.c_str()

هل هذا تبع المكتبة المعيارية:

#include<cstdlib>

أم يعتبر من دالة في class معين أو ما شابه!

وسؤال آخر الكود يأخذ string ويخزنه في مؤشر من نوع char

ما فهمت الفائدة الأساسية من هذا العمل ..

أنا اكتشف isdigit الآن راح أسوي عليها تجارب وأرجع أرد لك خبر

شكراً لردك الكريم أخي العزيز فهد

موفق

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

شارك هذا الرد


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

شكراً على الدالة اللطيفة راح أستخدمها كثير

شكراً لك

هذا مثال:

int strint_to_int(string str)
{
const char *a= str.c_str();

for(int i=0; i < str.length(); i++)
if(!(isdigit(str[i])))
return -1;

return (atoi(a));
}

int main()
{
string num;

cout << "Enter Number: ";
cin >> num;

if(strint_to_int(num) == -1)
cout << "you input string. only numbers are allowed." << endl;
else
cout << strint_to_int(num) << endl;

return 0;
}

شكراً لك مرة أخرى

0

شارك هذا الرد


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

حياك الله .

بالنسبة لدالة التحويل atoi تستخدم من اجل التحويل من نص الى رقم.

وتاخذ بارمتر نص من النوع مؤشر الى تشار. لذلك حولت من سترنق الى تشار.

أما الدالة isdigit فهي من اجل معرفه الحرف هو رقم ام لا.

وبالتوفيق.

0

شارك هذا الرد


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

مرحبا اخي

استخدم الـ Exception Handling

مثال برنامج يطلب من المستخدم ادخال قيمة في متغير من نوع int وفي حال ادخال حرف يطبع له الرسالة this is not number

#include<iostream>
using std::exception;
using std::cout;
using std::cin;
using std::cerr;
main()
{
int x;
cin.exceptions(cin.failbit);
try
{
cin>>x;
cout<<x;
}
catch(...){cerr<<"This Is Not Number";}
return 0;
}

تحياتي

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

شارك هذا الرد


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

أخي time1 لك جزيل الشكر عل المعلومة المفيدة

راح أستفيد منها أيضاً، إذا فيه طرق ثانية أرجو من الأخوة إخباري

شكراً لكم

0

شارك هذا الرد


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

اتفضل اخي هذا البرنامج البسيط

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "ctype.h"

int i = 0;
printf("Please Input Integer Number:- \n ");
i = getche();
while(!isdigit(i))
{
clrscr();
printf("Please Input Integer Number:- \n ");
i = getche();
}
printf(""+i);

يقوم هذا البرنامج بأخذ Character من شاشة الدوس فإذا كانت Integer فسوف يجتاز جملة ال While ويقوم بطباعة الرقم

واذا لم تكن Integer فسوف يدخل داخل ال While ويبقى داخله حتى يقوم المستخدم بإدخال Integer

وجاهز لأي سؤال

اخوك

ابوكارليتو

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

شارك هذا الرد


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

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

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