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

[ تمت الإجابة ]مشكل في object file declaration

بدأه Kimsekai في 17 ديسمبر 2012 · 4 رد · 507 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي مشكل في العمل بالملفات عرفت object file لقرائة الملف و للكتتابة فيه لكن عندما أضيف المدن للملف لا تتم الإضافة بشكل صحيح !

#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int recherche(string V[], string Vil, int N);
int main(int argc, char *argv[])
{

    ofstream Ecrireville;
    ifstream lireville;
    string villee,Vil;
    int choix,pos;
    do
    {
    cout<<"1.	Créer une nouvelle ville."<<endl;
    cout<<"2.	Rechercher une ville."<<endl;
    cout<<"3.	Supprimer une ville."<<endl;
    cout<<"4.   Quiter."<<endl;
    cin>>choix;
    switch(choix)
    {
            case 1:
                 cout<<"Saisir la ville a ajouter : "<<endl;
                 cin>>Vil;
                 lireville.open("Villes.txt");
                   while(lireville>>villee)
                   {
                                      if(villee==Vil)
                   {
                                  cout<<"cette ville déja existe"<<endl; 
                       lireville.close();

                   }
                   else
                   {
                       Ecrireville.open("Villes.txt",ios::app);
                       cout<<"la ville est ajoutée avec succés! "<<endl;
                       Ecrireville<<Vil<<endl;
                       Ecrireville.close();
                   }
                   }
                 break;
            case 2:
                lireville.open("Villes.txt");
                   while(lireville>>villee)
                   {
                                      if(villee==Vil)
                   {
                                  cout<<"cette ville existe dans la position "<<endl; 
                       lireville.close();

                   }
                   else
                   {
                       cout<<"Cette Ville n'existe pas "<<endl;
                   }
                   }
                 break;
            }
            }

            while(choix!=4);
    system("PAUSE");
    return EXIT_SUCCESS;
}

تم تعديل هذه المشاركة بواسطة Kimsekai في 17 ديسمبر 2012 في 20:59

#2

السلام عليكم أخي الكريم ...

خطؤك في عملية الإدخال هو أنك عندما تقوم بالبحث عن المدينة لترى إن كانت موجودة مسبقا أو لا ...

فإنك تدخل حلقة while وهذا سيؤدي إلى المرور على كل المدن سواء وجد المدينة المناسبة أم لا

وعندما يمر على كل مدينة فإنه سيقوم بإظهار عبارة على الشاشة ...

وعند كل مدينة سيقوم بالمقارنة .

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

حتى تعرف أين خطؤك أجب عن السؤال التالي :

متى نحكم على مدينة أنها غير موجودة ؟

عندما نبحث في كل أسماء المدن ولا نجدها في أي اسم ...

إذا : لا يجب أن تضع في حلقة while الif وال else معاً ...

حتى لا أطيل عليك الكلام ...

انظر إلى التصحيح وافهمه جيداً ..

ثم اكتب مثله في برنامجك ..

        	case 1:
             	cout<<"Saisir la ville a ajouter : "<<endl;
             	cin>>Vil;
             	lireville.open("Villes.txt");
             	bool VilleExiste=0;
               	while(lireville>>villee)
               	{
                    	if(villee==Vil)
                    	{
                        	cout<<"cette ville déja existe"<<endl;
                        	lireville.close();
                        	VilleExiste=1;
                        	break;//Break The While loop
                    	}
               	}
                	if(VilleExiste!=1)
               	{
                   	Ecrireville.open("Villes.txt",ios::app);
                   	cout<<"la ville est ajoutée avec succés! "<<endl;
                   	Ecrireville<<Vil<<endl;
                   	Ecrireville.close();
               	}
             	break;

لاحظ عمل الكود ... نضع متحولا يمثل حالة المدينة هل هي موجودة أو لا ...

ثم نمر على كل المدن .. فإذا وجدنا المدينة ... نغير قيمة المتحول ...

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

لأنها لو كانت موجودة لدخلنا الى الشرك if داخل الحلقة while ولغيرنا قيمة المتحول ..

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

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

#3

نعم أخي معك حق تماما في تلك النقطة شكرا لك .

لكن السبب الآخر هو أن الحالة الثانية من السويتش فيها مشكل ما ؟

#4

في الخيار الثاني للswitch

عندك نفس المشكلة السابقة ... واضع if و else في الحلقة معاً ...

يمكنك حلها بنفس الطريقة المذكورة في الرد السابق ...

_متحول يبين حالة المدينة موجودة أم لا

كما وجدت خطأ بسيط هنا :

                                  cout<<"cette ville existe dans la position "<<endl; 
                       lireville.close();

أظن أنك تريد أن تذكر رقم المدينة ولم تذكره ... قم بعمل عداد يزيد في كل دورة للحلقة ...

وأظهر قيمته في حال العثور على المدينة ثم اعمل break للخروج من الحلقة (لا تنس ذلك)

<br>بالتوفيق<br>

1
#5

نعم أخي آسف

شكرا لك لقد حللت المشكلة :)

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