заполнение массива
Столкнулся с проблемой:
неком исходном файле содержатся данные в виде: пн 23.3 55.8 32.5 вт 54.3 23.4 сб 45.7.78.1 или просто: 65.3 74.4 85.2 23.4 54.3 и т.д. нужно заполнить массив double [7][] в итоге массив содержит измерения погоды (строки - дни недели. столбцы - измерения) Вопрос: как заполнить такой массив? Как узнать длину каждой строки массива? |
появилась идея - можно запрашивать кол-во столбцов в самом начале.
примерно то, что родилось в голове: Код:
#include<stdio.h> 2. Возможно ли обойтись без этой переменной "а"? Чтобы прежде чем заполнять массив, допустим посчитать кол-во элементов первой строки, содержащейся в файле? 3. Каким образом в данной ситуации использовать средства ввода/вывода с++ (cin/cout) 4. Будет ли правильно заполнен массив, если данные в файле выглядят примерно так: 65.4 -98.7 63.5 -46.5 12.3 38.7 38.7 30.8 65.7 74.8 44.5 75.0 -87.0 28.7 34.7 65.4 98.7 -63.5 -46.5 -12.3 38.7 387 30.8 65.7 74.8 -44.5 -75.0 -87.0 28.7 34.7 24.3 70.8 73.2 24.2 09.8 т.е. данные разделены пробелом, присутствуют как положительные. так и отрицательные значения |
Lisiy_egik, можно задать структуру файла Бинарные файлы
Единственное что по данной структуре должен быть и заполнен файл, так что если в блокноте где-то пробел был добавлен, программа может с ошибкой считать файл. В идеале нужно что-б в самой проге и была произведена запись в файл. |
решил посмотреть как заполняется массив и вот что вышло:
Код:
#include "stdio.h" Код:
#include "stdio.h" 23.4 55.2 34.5 54.4 35.6 79.8 45.9 65.8 76.7 23.1 45.2 56.3 34.4 98.5 56.6 12.3 23.2 34.1 98.4 87.3 76.2 При компиляции ошибок нет, а вот при запуске выдает: Необработанное исключение в "0x691c936c (msvcr90d.dll)" в "p2e1.exe": 0xC0000005: Нарушение прав доступа при записи "0x80000000". В чем моя ошибка? |
Цитата:
У меня есть прога похожего плана. Описание программы. Из файла заполненного разными символами выбрать все восеьмеричные комбинации цифр (например "hfdhfhdj45777789rerer jjjj 75 uhh78900987" выбираем 45777789 и 78900987). Могу текст проги выложить, только там нет комментриев. |
так наверное проще всего
for(r = 0; r < NR; r++) fscanf(f,"%f %f %f\n", weather[r][0], weather[r][1], weather[r][2]); если данные всегда вида: 23.4 55.2 34.5 54.4 35.6 79.8 45.9 65.8 76.7 23.1 45.2 56.3 34.4 98.5 56.6 12.3 23.2 34.1 98.4 87.3 76.2 |
Цитата:
|
Тогда примерно так:
Код:
while(!feof(f)) |
Цитата:
|
Цитата:
Количество элементов в строке определяет "eatt" ее наверное надо записать в дополнительный массив массива weather. |
я додумался, как определить кол-во элементов в строке. Столкнулся с такой проблемой:
при объявлении массива weather[NR][NC] компилятор сообщает об ошибке, т.к. не может разместить в памяти массив с нулевой размерностью. вот код, подскажите пожалуйста, если это возможно, как мне все таки создать массив, а только после какого-то момента задать ему размерность Код:
#include <iostream> Код:
float weather[NR][NC]; main.cpp(15) : error C2057: требуется константное выражение main.cpp(15) : error C2466: невозможно выделить память для массива постоянного нулевого размера main.cpp(15) : error C2087: weather: отсутствует индекс |
я думаю на #define NC *c ругается, константа не должна меняться, это же не перменная.
|
все то. что я делал не верно, нужно было через структуру делать, потом читать не символы, а то. что мне точно известно - это значения типа дабл, в общем пойду читать книжки умные и форумы рыть ((
|
Если будет время сделаю заполнение массива по вашему случаю... Структура нужна для удобства, но в ней то всеравно надо алгоритм реализовывать...
|
Сделал, пользуйте...
Код:
//--------------------------------------------------------------------------- |
Не совсем по теме конечно, вот как ещё можно сделать. здесь не хранится в виде *double[7]
Код:
#include <iostream> |
Ferum01, pva, спасибо большое, это действительно очень помогло
|
Цитата:
|
Цитата:
Вероятно эту библиотеку можно не использовать. |
Время: 05:33. |
Время: 05:33.
© OSzone.net 2001-