Чтение массива из файла на C

программирование

Помогите дописать программу на С:

В файле есть массивы чисел:
1.323 5.434 0
4372.363 7382.3 3
6726.37 -36.9 7
End
63.32 83.8 5
367.23 883.9 2
End


То есть "float float int", массивы разделены строкой End
Надо считать из файла первый массив (3 строки), затем проделать с ним кое-какие действия, затем на его же место записать второй массив и т.д. до конца файла. Число строк в файле найти могу (всех строк, а не только с числами), число строк в каждом массиве заранее неизвестно. Пробовал делать через fscanf
fscanf("%f %f %i", &x[i], &y[i], &col[i])
, но он не видит разницы между строкой с числами и строкой с текстом, даже ошибки не пишет.

Примечание:
>> а для проверки, если строка = END пиши так:

А куда писать? У меня же цикл! Если я так каждую строку буду проверять, равна ее длина 3 или нет, то после проверки мне придется откатываться к началу этой же строки (в случае, если ее длина не равна 3), чтобы прочитать ее еще раз, но уже не через getline, а через fscanf.
Ответы:
Нужно забирать по одной строке, а потом самому парсить (или сторонними либами).
Вы забыли первый параметр fscanf при цитировании.
А для проверки нужно проверять значение, возвращаемое функцией.
Each of these functions returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned. If an error occurs, or if the end of the file stream is reached before the first conversion, the return value is EOF for fscanf or WEOF for fwscanf.
В общем, функция возвращает число преобразованных полей, его и надо сравнивать с 3.
if(fscanf(file,"%f %f %i",&x[i],&y[i],&col[i])==3)
{
//преобразования
}


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.