Если вы хотите что-то сделать, чтобы создать работающую программу самостоятельно, прочитайте это.Если вы предпочитаете учиться на собственном примере и изучать сильный пример ввода / вывода на C ++, я бы определенно предложил рассмотреть код Саймона.
Перво-наперво: вы создали буфер строк с 30 символами, когда писал, "символ строки [30];"В следующей строке вы должны изменить вызов readFile.getline (row, 50) на readFile.getline (row, 30).В противном случае он попытается прочитать 50 символов, и если кто-то имеет имя длиннее 30, память после буфера будет повреждена.Итак, это нет-нет.;)
Если вы хотите изучать C ++, я настоятельно рекомендую вам использовать стандартную библиотеку для ввода-вывода, а не специальные библиотеки Microsoft, которые предлагает rplusg.Вы на правильном пути с ifstream и getline.Если вы хотите изучать чистый C ++, у Саймона есть правильная идея о том, чтобы отключить массив символов для std :: string.
В любом случае, Джон дал хороший совет по структурированию вашей программы вокруг описания проблемы.По его словам, вы захотите читать четыре строки с каждой итерацией цикла.Когда вы читаете весовую линию, вы захотите найти способ получить числовой вывод из нее (если вы придерживаетесь массива символов, попробуйте http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/, или http://www.cplusplus.com/reference/clibrary/cstdlib/atof/ для не-целыхномера).Затем вы можете добавить это к общему весу.Каждая итерация выводит данные в файл по мере необходимости, и как только ваш общий вес> = 10000, вот когда вы знаете, что нужно выйти из цикла.
Однако вы можете не использовать getline внутри вашего whileусловие вообще: так как вы должны использовать getline четыре раза за каждую итерацию цикла, вам придется либо использовать что-то похожее на код Саймона, либо сохранить ваши результаты в четырех отдельных буферах, если вы сделали это таким образом (иначе у вас не будет временичтобы прочитать вес и распечатать строку до того, как будет прочитана следующая строка!).
Вместо этого вы также можете структурировать цикл как while (total <= 10000) или что-то подобное.В этом случае вы можете использовать четыре набора if (readFile.getline (row, 30)) внутри цикла, и вы сможете читать вес и распечатывать вещи между каждым набором.Цикл завершится автоматически после итерации, которая увеличивает общий вес более 10000 ... но вы также должны выйти из нее, если достигнете конца файла, или вы застрянете в цикле на всю вечность.: p </p>
Удачи!