// MyClass.h
{
private:
char FirstName;
char LastName;
char MiddleName;
int ID;
int Age;
};
Что это за структура / класс? Я думаю, что это мой класс. В любом случае myClass не имеет смысла имени.
- FirstName / LastName / MiddleName eighter являются инициалами - что означает, что имя неверно - или неправильно набраны. То, что вы ищете, это eighter std :: string или char *.
- Традиционно ID - это первое поле, если оно необходимо.
``
// Globals
const int myIndex = 256;
myClass classType[ myIndex ];
Как правило - никогда не используйте глобалы. У вас будут проблемы.
int main()
{
// assume preprocessors are included
cout << "Enter File: ";
cin >> cArray;
Что такое cArray?
if ( !inFile.good() )
Где определяется inFile? Почему вы проверяете состояние ввода-вывода перед любой операцией ввода-вывода в этом потоке?
{
cout << "Wrong?" << endl;
}
inFile.open( cArray );
Хорошо. Не проще написать ifstream inFile(cArray)
?
while (! InFile.eof ())
{
linecount ++ // давая мне 1 и не считая строки файла
Вы просите переполнения. Что если в файле больше 256 строк? Какая наихудшая программа не потерпит крах - она, скорее всего, напишет в каком-то неуказанном месте.
inFile.read( ( char * ) &myType[linecount], sizeof( myClass ) );
- Никогда не используйте двоичные форматы, если нет необходимости. Их очень сложно отлаживать. Если у вас хороший, простой текстовый формат, все, что вам нужно протестировать, это текстовый редактор для редактирования тестовых входных файлов. С бинарным у вас нет гарантии, что ошибка в программе, а не в тестовом примере.
Everné, если вы делаете используете двоичный формат, делайте не читайте его таким образом. На самом деле у вас нет возможности определить, не изменил ли компилятор смещения. Например, ID
обычно будет иметь смещение 4 байта. Но компилятор может оптимизировать его.
Кроме того, вы не можете определить размер ID
и Age
, за исключением того, что они больше, чем 2 байта. Обычно они равны 4, но на некоторых 64-битных компиляторах (ИМХО такой способ верен там, где int
== одно слово) это может быть 8. В будущем это может быть 16 (если будет 128-битные компьютеры). Вы можете думать, что никогда не будет, но в то же время «768 К было достаточно для всех» (это было много в те дни).
Если вы попытаетесь прочитать текст таким образом
}
}
Если вам не нужно проверять ввод (в таком случае iostreams - не лучший инструмент):
class person
{
public:
person (const std::string &first_name,
const std::string &last_name,
const std::string &middle_name,
int id,
int age)
: m_first_name(first_name),
m_last_name(last_name),
m_middle_name(middle_name,
m_id(id),
m_age(age) {}
private:
std::string m_first_name, m_last_name, m_middle_name;
int m_id, m_age;
};
// Lots of other code
std::vector<person> people;
while(...)
{
std::string first_name, last_name, middle_name;
int id, age;
in_file >> first_name >> last_name >> middle_name >> id >> age;
person p(first_name, last_name, middle_name, id, age);
people.push_back(p);
}
Его можно сократить и заполнить, но:
1. Используйте хорошие функции C ++, такие как STL (вам не нужно запоминать индекс или вам не нужно беспокоиться о переполнении вектора)
2. Использует текстовый формат