Re: Впорядкувати файл зменшенням зростання учнів
Одразу зазначу, що ви змінили мову програмування і ані слова про це не сказали: на початку була C, а зараз - C++ (до того ж в процесі ви згадували фішки з C++11; добре, звичайно, що ви намагаєтеся розібратися в сучасних тенденціях, але бажано спершу вивчити основи).
Давайте все ж розберемося з першою частиною. Вам треба прочитати з файлу зрости учнів. Для цього доведеться відповісти на два питання: як вони зберігаються у файлі та як вони представлені в програмі. Судячи з того що файл має розширення txt, він текстовий; ви не сказали, в якій саме формі записані зрости (сантиметри, дюйми, суміш, ще щось), але ризикну припустити, що це - цілі числа без додаткових позначок. Сподіваюся, між числами в файлі знаходяться пробіли або символи нового рядка, а не якісь крапки з комами. Насправді, це в C++ нечасто трапляється, щоб конструкції мови дозволяли подібну свободу (один чи кілька пробіли, табуляцій і нових рядків між числами), але тут саме той випадок.
Отже, з питанням "звідки" розібралися, тепер - куди ми це читаємо? Де у вас масив зростів, який ви хочете сортувати? line - масив символів. Навряд чи ви мали на увазі, що в одного хлопця зріст '2', в другого - 'а', а в третього - '@'. Пригадайте, який тип в C/C++ зберігає цілі числа? Правильно - int. Отже,
int heights[SIZE];
int count=-1;//номер останнього учня в масиві
ifstream infile("int.txt");
while( !infile.eof() ) //доки не досягли кінця файлу
{
count++;//збільшуємо лічильник
infile>>heights[count];//>> ігнорує розділювачі: пробіли, табуляції та нові рядки
}
Звертаю увагу - метод eof перевіряє не стан файлу, а результат останньої операції читання. Відповідно, те, що прочиталося в масив при останній ітерації, буде некоректним (оскільки при цьому було досягнуто кінця файлу), а отже, всього в масиві буде count елементів.
В принципі, цикл можна скоротити до
while(infile>>heights[++count]);
Коли потік стикається з помилкою, він починає повертати false при перетворенні на bool. Але для вас, гадаю, поки зрозуміліша перша, розлогіша форма.