سؤال

بغض النظر عن ما أحاول ، لا يمكنني الحصول على الكود التالي للعمل بشكل صحيح.

ifstream inFile;
inFile.open("sampleplanet");
cout << (inFile.good()); //prints a 1
int levelLW = 0;
int numLevels = 0;
inFile >> levelLW >> numLevels;
cout << (inFile.good()); //prints a 0

في أول cout << (infile.good ()) ؛ ، يطبع 1 وفي الثانية A 0. والذي يخبرني أن الملف ينفتح بشكل صحيح ، لكن Infile يفشل بمجرد القراءة منه. يحتوي الملف أكثر من ذلك على خطوط/أحرف كافية ، لذلك لا توجد طريقة حاولت قراءة نهاية الملف في هذه النقطة.

محتويات الملف:

8
2
#level 2
XXXXXXXX
X......X
X..X..XX
X.X....X
X..XX..X
XXXX...X
X...T..X
XXX..XXX
#level 1
XXXXXXXX
X......X
X..X.XXX
X.X..X.X
X..XX..X
X......X
X^....SX
XXX.^XXX
هل كانت مفيدة؟

المحلول 2

اتضح أن مشكلة مع X-Code. لقد قمت بإنشاء مشروع في الفول الصافي باستخدام نفس الرمز الدقيق ولم يكن لدي أي مشاكل. عجيب.

تحديث: في مشروع X-Code الخاص بي ، قمت بتغيير SDK النشط من Mac OS 10.6 إلى Mac OS 10.5 وكل شيء يعمل بشكل جيد الآن.

نصائح أخرى

إنه خطأ معروف. من Xcode 3.2.1's ملاحظات الإصدار:

لا يتوافق برنامج التحويل البرمجي GCC 4.2 الافتراضي مع وضع تصحيح مكتبة C ++ القياسي. قد لا تعمل برامج C ++ التي تم تجميعها باستخدام XCode 3.2 في تكوين التصحيح. لإصلاح ذلك ، قم بتعيين إصدار المترجم على 4.0 ، أو قم بتحرير وحدات الماكرو قبل المعالجة المسبقة لتكوين التصحيح وإزالة الإدخالات:
_GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

لقد استنسخت واختبرت الكود والملف الخاص بك وكان إخراجي 11 وتم تعيين كل من Levellw و Numlevels كما هو متوقع. بالتأكيد سألقي نظرة فاحصة على الأحرف المخفية في ملفك (أو عدم وجوده). أحب استخدام Notepad ++ مع تمكين "إظهار جميع الأحرف". ملفي هو بالضبط ما نشرته مع عودة النقل و Linefeed في نهاية كل سطر.

لقد قلت أول infile.good () يطبع 1. هذا ينبغي أن يعني فتح الملف موافق. لأنك قلت "إنه يعمل من خلال المحطة وليس Xcode" في Tehmick Post - لما يستحق - عندما اختبرت هذا ، واجهت المشكلة التالية: My IDE (C ++ Builder) يدير البرنامج من دليل تصحيح الأخطاء (عندما تكون في وضع التصحيح). كنت بحاجة إلى وضع "sampleplanet" في دليل التصحيح أو استخدام مسار في المفتوحة التي وجدت الملف مثل ".. sampleplanet".

+MyProjectDirectory
|  mymain.cpp (Even though this is where I had the source file..)
|  sampleplanet
+--DebugDirectory
     mymain.obj
     mymain.exe (the program runs out of this directory.)

بمجرد أن اعتني بالقضية أعلاه ، كل شيء يعمل كما هو متوقع باستخدام الرمز والملف أعلاه. راجعت الملف في Notepadd ++ لتأكيد [CR] [LF] بعد كل سطر. إذا قمت بإنشاء الملف في Linux ، فقد يكون له [LF] فقط (فعلت كل شيء تحت Windows).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top