Хорошо, начнем сверху.
Ваш код был (до того как я его переформатировал) беспорядок. Грязный код труднее читать, и, скорее всего, в нем есть ошибки.
У вас есть 3 массива, каждый из которых содержит 20 строк. Зачем тебе так много?
Один из них назван temp
; необходимость использовать это в качестве имени переменной является хорошим показателем того, что вы где-то неправильно обрабатываете данные.
Вы объявляете int count
относительно рано, а затем инициализируете его до 0. Хотя это и не обязательно плохо, но это не самый лучший метод (при необходимости делайте оба сразу).
Вы можете объявлять локальные переменные более чем в строке, но вам не нужно объявлять их все в верхней части функции. Это не обязательно в C ++.
int main ()
{
string creditcards[20];
int i = 0, x = 0, amount = 0;
(законно, но может и не понадобиться)
Как правило, лучше объявить и инициализировать переменную одновременно, непосредственно перед тем, как вам это понадобится:
int count = 0;
getline(infile, temp[count], '\n');
Я помню, что читать, пока вы не нажмете eof, не рекомендуется, хотя я не совсем уверен в этом. Вы можете изменить это:
while ( !infile.eof() )
{
Итак, первая фактическая ошибка, которую я вижу здесь, заключается в том, что вы читаете строку с шагом count
, а затем читаете еще одну строку, прежде чем действовать. Это намеренно, и если да, то почему это необходимо? Выполнение getline
и приращения внутри цикла будет более читабельным и потенциально более надежным.
count++;
getline(infile, temp[count], '\n');
Эта строка - ошибка, я думаю:
for(i=0,x=0; i<numstudents;i++,x+4)
Последний раздел i++, x+4
. Это не меняется x
.
Следующий цикл после этого обрабатывает i
таким же образом, как этот цикл использует x
, так что вы, вероятно, можете объединить эти два.
Теперь, вдобавок ко всему, массивные временные массивы не являются решением этой проблемы (или любой другой, о которой я могу думать).
Для хранения такого рода данных вам нужно просмотреть std::map<std::string, student*>
или std::vector<student*>
. Вектор позволит вам при необходимости переместить новую студенческую структуру на задний план, а карта позволит вам набирать их по имени и затем извлекать, что-то вроде этого:
typdef map<string, student*> studentmap;
studentmap students;
studentmap::iterator iter = students.find("Bob");
if ( iter != students.end() )
{
student * bob = iter->second;
// Work with data
}
Это гораздо лучший способ справиться с этим, и он потребует от вас больших усилий по угадыванию того, что вы делаете сейчас.