حلقة If Infinite (لا يبدو أن تجد العلامة للتوقف عن القراءة)
-
28-09-2019 - |
سؤال
سؤال سريع إلى حد ما ... لا يمكنني معرفة لماذا لا تنتهي هذه الحلقة ...
#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;
سيؤدي ذلك إلى تجاهل مسافة بيضاء مثل كسر الخط.
لا تنتمي إلى StackOverflow