Использование scanf
почти всегда является плохой идеей: оно не делает различий между символами новой строки и другими пробелами, что позволяет очень просто не знать, где вы находитесь, независимо от того, что вы пытаетесь проанализировать. Возможно, лучше: читать в строках, используя fgets
, и переводить каждую строку в sscanf
, проверяя возвращаемое значение, чтобы убедиться, что вы получили то, что искали. В качестве альтернативы используйте реальный синтаксический анализатор: создайте свой собственный, используя генератор синтаксического анализатора, такой как flex
, или используйте какой-нибудь XML для формата данных и используйте синтаксический анализатор XML или что-то в этом роде.
Вероятно, было бы целесообразно спроектировать формат данных таким образом, чтобы синтаксическому анализу было труднее выйти из синхронизации, не замечая этого, и сделать структуру данных более понятной для читателей-людей.