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

سؤال عن structures

بدأه tracy في 5 أغسطس 2009 · 7 رد · 778 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ما أغرب موضوع الـ structure ،،
وهو من الأمور التي تجعلني أتوقف بكثير من الحيرة أحيانًا..

لربما من السهل أن أعرف نوعًا واحدًا من المتغيرات داخل الستركت.... لكن حينما
أقرر أن أعرف أكثر من نوع، فهذا ما يخرب برنامجي ككل.... مثلاً:


صممت برنامجًا يطل من المستخدم أن يدخل التاريخ ثم يعرضه البرنامج على هذه الفورم:

day/month/year

هكذا:

 

#include <iostream>
using namespace std;

struct date {
int day, month, year;

};

int main () {

date.now;

cout << "Enter day, month, year: \n";
cin >> now.day >> now.month >> now.year;

cout << "\nThe Date is: \n";
cout << now.day << "/" << now.month << "/" << now.year << endl << endl;

system ("pause");
return 0;
}

 

والبرنامج اشتغل بسلام... لكني فوجئت فيما بعد أن المطلوب مني هو تنفيذ برنامج يأخذ من المستخدم التاريخ على هذا الشكل:

day/month/year

ويخرجه على نفس الصورة.... فحاولت أن أعدل على هذا البرنامج، وكانت الكارثة:
 

#include <iostream>
using namespace std;

struct date {
int day, month, year;
char dash;
};

int main () {
date date1;
date1.now;
date1.dash;

cout << "Enter day, month, year in the formate (day/month/year): \n";
cin >> now.day >> dash >> now.month >> dash >> now.year;

cout << "\nThe Date is: \n";
cout << now.day << "/" << now.month << "/" << now.year << endl << endl;

system ("pause");
return 0;
}



طبعًا، كل الموضوع أصبح خرابًا......


فالستركت غاية في التعقيد بنظري....

أريد أن أعرف أكثر من متغير في الستركت الواحد وبأنواع مختلفة.... لكن أحس بأن استرجاعها في المين أمر تعجيزي!!!!!


:S :S :S
:wacko: :wacko: :wacko:
 

تم تعديل هذه المشاركة بواسطة مصطفى 36a2 في 9 نوفمبر 2013 في 18:05 — السبب: تنسيق الكود

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#2

التعقيد ليس في الstruct فالstruct واحد من أبسط هياكل البيانات فهو مجرد تجميع لعدد من المتغيرات.

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

مثل

Enter Month: 12

Enter Day: 23

Enter Year: 1976

و ميزة هذه الطريقة أنها تعطيك الفرصة لعمل validation على المدخل. فربما حاول المستخدم ادخال رقم سالب أو يوم 67 أو شهر 39 أو سنة 1 و كل هذا خطأ

الطريقة الثانية هي أن تقرأ التاريخ كله مرة واحدة في متغير string ثم تقسمه على أساس الفاصل \ و تحول الأقسام الى أرقام (شهر\يوم\سنة) ثم تقوم بعمل الValidation ثم تخزن القيمة الصحيحة

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#3

:wacko: :wacko: :wacko:

:( :( :(

اقتباس
ميزة هذه الطريقة أنها تعطيك الفرصة لعمل validation على المدخل. فربما حاول المستخدم ادخال رقم سالب أو يوم 67 أو شهر 39 أو سنة 1 و كل هذا خطأ

الطريقة الثانية هي أن تقرأ التاريخ كله مرة واحدة في متغير string ثم تقسمه على أساس الفاصل \ و تحول الأقسام الى أرقام (شهر\يوم\سنة) ثم تقوم بعمل الValidation ثم تخزن القيمة الصحيحة

مش فاهمة أوي الحقيقة!!! :(

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#4

في برنامجك يمكنني أن أدخل أي رقم على أنه يوم حتى لو كان غير منطقي مثل 1000! هل هناك يوم 1000 ؟

أو يمكنني أن أضع رقم سالب أو حرف و كل هذا يعتبر مدخل خاطئ و هنا تأتي مهمة الValidation

مصري في بلاد الفرنجة.

قريباً اقرأ مقالاتي على It-scoop

#5

جربى أختى الكود التالى

#include <iostream>
using namespace std;
struct date {
	int day, month, year;	
};
int main () {	
	date now;
	cout << "Enter day, month, year: \n";
	cin >> now.day;
	cin.ignore();
	cin>> now.month;
	cin.ignore();
	cin>> now.year;

	cout << "\nThe Date is: \n";
	cout << now.day << "/" << now.month << "/" << now.year << endl << endl;

	system ("pause");
	return 0;
}

وأنا أتفق مع أخى متميز فى موضوع validation

سلام

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#6

جميل جدًا.. جزاكم الله خيرًا أستاذي أمين...... :)

لكن ما هي فائدة الفانكشن cin.ignor() ؟

ولو أنا حبيت آخد التاريخ من اليوزر على نفس الشكل اللي البرنامج هيخرجه، كدا يعني:

day/month/year

أعملها ازاي بالـ structure ؟ لأني عرفتها في الستركت على انها char.. لكني لم أفلح فيها....

وجزاكم الله خيرًا....

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

#7

العفو أختى tracy

الداله ignore تعنى اهمل الحرف الذى يقرأه كائن cin حاليا

فعندما تقومى بإدخال التاريخ بالشكل التالى

2/3/2009

يقوم البرنامج بقرءة العدد 2 وتخزينه فى now.day

ثم يهمل / وهكذا ......

ولو أردتى أن يكون للداش متغير حرفى داخل الستركت يمكن تعديل الكود كالآتى

#include <iostream>
using namespace std;
struct date {
	int day, month, year;
	char dash;
};
int main () {	
	date now;
	cout << "Enter day, month, year: \n";
	cin >> now.day;
	cin>>now.dash;
	cin>> now.month;
	cin>>now.dash;
	cin>> now.year;

	cout << "\nThe Date is: \n";
	cout << now.day << "/" << now.month << "/" << now.year << endl << endl;

	system ("pause");
	return 0;
}

سلام

اللهم صل على سيدنا محمد وعلى آله وصحبه وسلم

#8

أنا كدا فهمت الموضوع ككل.. حضرتك بسطته لي جدًا..

بجد أنا ممتنة جدًا لحضرتك..... ربنا يكرمك أستاذي!!

أستغفر الله العظيم الذي لا إله إلا هو الحي القيوم وأتوب إليه

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