Munin, мне в этих статьях многое непонятно почему-то. Но я уже интуитивно кое-что понял, чего раньше не мог понять.
Например что %ld - это место переменной.
Да. Надо точно согласовывать эту запись (которая называется "спецификация формата") с той переменной, которую вы считываете, и с тем, в каком виде ожидаете информацию во входном файле. Например,
%d -
int%ld -
long int%f -
float%lf -
doubleОсобое внимание этому надо уделять для
scanf -
printf-то может вывести мусор, и всё, а
scanf может записать мусор в память (причём даже в другие переменные), с фатальными последствиями для программы. Для 32-битных платформ обычно
int совпадает с
long int, так что и эти ошибки "прощаются", но вот
float практически никогда не совпадает с
double.
Еще я правильно понял, что программа попорядку считывает числа? А уже второй прогон она не пойдет, так как дойдет до окончания файла?
Да, если пользоваться только этими функциями - только так. Но можно использовать функции
rewind(),
fseek(),
fsetpos(), и считать файл по второму проходу (или даже перемещаться в любое место файла, например, запомнив его с первого прохода). Правда, большинство олимпиадных задач для этого не приспособлены, там вполне достаточно однопроходного чтения.
-- 31.07.2012 21:50:06 --Просто на
http://acmp.ru/article.asp?id_text=118 написано, что должно быть %ld и показано в примере.
Это просто означает, что в условиях
http://acmp.ru/ это работает. Это не значит, что это совсем уж правильно.