Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ввод двумерного массива из файла


Автор: Slash_from_Ryazan 25.4.2005, 22:22
Добрый вечер!
Подскажите пожалуйста как реализовать в C ввод двумерного массива из текстового файла, чтобы все пробелы межу значениями float игнорировались и при этом автоматически происходил подсчет размерности массива. В паскале это очень легко реализовывалось через read, readln....

Автор: Ggamhat 26.4.2005, 04:25
В с++ это тоже просто сделать. Функция getc() считывает строку данных из файла. Потом ты эту строку разбираешь по элементам до конца, таким образом можешь подсчитать кол-во элементов в каждой строке и вообще кол-во строк. Затем создаёшь указатель на область памяти и отводишь память размером <кол-во строк>x<кол-во столбцов>. И работаешь с ними

Автор: Slash_from_Ryazan 26.4.2005, 19:32
Спасибо. Идею понял - попробую реализовать. В принципе предложенный меня метод полностью устраивает.
Но возник следующий вопрос: а нет ли в C функции, которая читает из текстового файла значение до пробела, а при достижении конца строки возвращает какое-либо фиксируемое значение?

Автор: Ggamhat 27.4.2005, 03:28
Функция fscanf() читает до первого раб. символа(пробел, новая строка, таб и др.)

Автор: jorkug 27.4.2005, 15:39
fscanf может читать строку в любом формате, например:
Код

...
float array[2][100];
for(int i = 0;i<100;i++)
   fscanf(f, "%f,%f\n", array[0][i], array[1][i])
...


Автор: Ggamhat 28.4.2005, 03:09
Никто и не спорит. Я имею ввиду вариант, когда надо считывать по одному значению(неизвестно кол-во элементов в строке).

Автор: Guest 28.4.2005, 22:06
1. Как выяснилось из мануала getc() читает из файла один!!! символ, целую строку читает fgets()
2. Может быть все-таки кто-нить подскажет как с помощью fscanf() поймать момент достижения конца строки. Прочитал по этому поводу весь help из Buildera, но так и не врубился как это сделать.
3. А не правильнее ли было написать?
Код

fscanf(f, "%f", &M[i]) //у меня без & не заработало!

Автор: jorkug 29.4.2005, 15:41
Цитата(Guest @ 28.4.2005, 22:06)
2. Может быть все-таки кто-нить подскажет как с помощью fscanf() поймать момент достижения конца строки.

Код

fscanf(f, "%s\n", str);// все символы до переноса строки
fscanf(f, "%s\0", str););// все символы до нулевого


Цитата(Guest @ 28.4.2005, 22:06)
3. А не правильнее ли было написать?

правильнее, я забыл их поставить. fscanf принимает указатели на переменные.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)