Хорошо, так что у меня с этим немного проблемы. Это для домашней работы, в частности, для моего C++ программирования I, но у меня есть то, что я считаю логическим недостатком. Все, что он должен делать в это время, считывается в информации из указанного файла, сохраняет его в паре параллельных двумерных массивов (один для строковых данных, другой для числовых данных), а затем печатает их на экране. Больше ничего еще не было добавлено, и это не требуется до второй половины проекта.
Когда я запускаю код, он загружает окно консоли, а затем сидит там пустое. Если бы кто-то был настолько добр, чтобы направить меня к общей проблеме, я был бы благодарен.
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
void readFile(int numericData[80] [4], string textData[80] [7]);
void printData(int numericData[80] [4], string textData[80] [7]);
int main()
{
string trash;
string textData [80] [7];
/* columns: 0 = name 1 = Weakness 2 = drops
3 = stealables 4 = poach item
5 = appearnce type 6 = location */
int numericData [80] [4];
// columns: 0 = HP 1 = XP 2 = LP 3 = diff rank
// used 2 multi-dimensional parallel arrays to avoid 10 parallel arrays
readFile(numericData, textData);
printData(numericData, textData);
return 0;
}
void readFile(int numericData[80] [4], string textData[80] [7])
{
ifstream inputFile;
inputFile.open("filename");
string trash;
string rankConverter;
for (int i = 0; i < 169; i++)
{
getline(inputFile, trash);
}
//throws out first 173 trash lines, until first usale line.
for (int rareReader = 0; rareReader < 80; rareReader++)
{
// edited for brevity. this section reads each individual component
// of the file and inserts them into the appropriate array section.
do
{
getline(inputFile, trash);
}
while (trash != "end-entry marker");
// throws away the rest of each entry as trash
}
//felt it relevant to mention that the following close command is before all
//lines of the file have been read and thrown out. not sure if relevant.
inputFile.close();
}
void printData(int numericData[80] [4], string textData[80] [7])
{
cout << setw(10) << "Name";
cout << setw(10) << "HP";
cout << setw(10) << "XP";
cout << setw(10) << "LP";
cout << setw(6) << "Rank";
cout << setw(10) << "Weakness";
cout << setw(10) << "Sprite";
cout << setw(10) << "Poach" << endl;
cout << setw(20) << "Drop";
cout << setw(20) << "Steals";
cout << setw(20) << "Location";
for (int printCount = 0; printCount < 80; printCount++)
{
cout << setw(10) << textData[printCount][0];
cout << setw(10) << numericData[printCount][0];
cout << setw(10) << numericData[printCount][1];
cout << setw(10) << numericData[printCount][2];
cout << setw(6) << numericData[printCount][3];
cout << setw(10) << textData[printCount][1];
cout << setw(10) << textData[printCount][5];
cout << setw(10) << textData[printCount][4] << endl;
cout << setw(20) << textData[printCount][2];
cout << setw(20) << textData[printCount][3];
cout << setw(20) << textData[printCount][6];
/* columns: 0 = name 1 = Weakness 2 = drops
3 = stealables 4 = poach item
5 = appearnce type 6 = location */
//copy of note for convenience in reading
}
}
Программа, скорее всего, где-то висит. Попробуйте выполнить печать на экране в начале программы. Если это работает, продолжайте добавлять вызовы "cout", чтобы печатать больше отладочных сообщений, пока не найдете точку, в которой висит программа. Это метод отладки, который вы будете использовать снова и снова. Иногда называется отладкой "cave man", поскольку более сложной альтернативой является прикрепление отладчика и переход через ваш код.
inputFile.open()
на ошибки, вашdo {} while();
может работать вечно из - заistream
с множеством failbit.numericData
textData
матрицыnumericData
иtextData
где-либо в программе, но вы читали из них в функцииprintData
. это, вероятно, приведет к тому, что ваша функцияprintData
пустые строки / значения мусора.