حلقة If Infinite (لا يبدو أن تجد العلامة للتوقف عن القراءة)

StackOverflow https://stackoverflow.com/questions/4293759

سؤال

سؤال سريع إلى حد ما ... لا يمكنني معرفة لماذا لا تنتهي هذه الحلقة ...

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
 //[city1][city2][distance]

 ifstream sourcefile;

 int data[50][50];



 sourcefile.open("a5.txt");
 if(!sourcefile)
 {
  cout << "file not found" << endl;
  return 1;
 }

 int temp1, temp2, temp3, check;

 char reader;

 check = 0;



 while(reader != 'Q')
 {
  sourcefile >> temp1;
  sourcefile >> temp2;
  sourcefile >> temp3;

  data[temp1][temp2] = temp3;

  cout << "data[" << temp1 << "][" << temp2 << "] = " << temp3 << endl;
  check++;

  if(check > 100)
  {
   cout << "overflow" << endl;
   return 1;
  }

  reader = sourcefile.peek();


 }



 return 0;
}

ملف الإدخال

1 2 10
1 4 30
1 5 99    
2 3 50    
2 1 70    
3 5 10    
3 1 50    
4 3 20    
4 5 60    
5 2 40   
Q

الإخراج:

data[1][2] = 10
data[1][4] = 30
data[1][5] = 99
data[2][3] = 50
data[2][1] = 70
data[3][5] = 10
data[3][1] = 50
data[4][3] = 20
data[4][5] = 60
data[5][2] = 40
data[0][2] = 40
data[0][2] = 40

...
... (repeats "data[0][2] = 40" about 60 more times)
overflow

هل هذه حالة من نظرة خاطفة على شخصية فشل؟

هل كانت مفيدة؟

المحلول

يتيح لك Peek رؤية الشخصية التالية ، والتي أعتقد أنها في هذه الحالة هو الخط الجديد بعد قيمة المسافة. نظرًا لأنها ليست Q ، تحاول الحلقة قراءة ثلاث قيم عدد صحيح آخر ، وتفشل ، وتعيين خطأ الخطأ. نظرة خاطفة ، عندما يكون هناك فشل ، يعيد EOF - لذلك لا يمكنك رؤية Q.

نصائح أخرى

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

sourcefile >> std::skipws;

سيؤدي ذلك إلى تجاهل مسافة بيضاء مثل كسر الخط.

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