Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2008, 23:42   #1
Iogan Gamba Puti
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 10
По умолчанию Многомерный массив

Здравствуйте,вопрос будет такой!

union DataSubject{
char marks[N1][N2];
char subline[N1*N2];
}datsub;

К ,примеру,я заполняю marks
GetDlgItemText(hDlg,IDC_EDIT1_2,dat sub.marks[0],N4);
...... GetDlgItemText(hDlg,IDC_EDIT1_...., datsub.marks[N1],N4);

и их пишу в файл fstream<<datsub.subline<<endl; как одну строку
Записывается всё,норм.Но когда, я "расклеиваю" строку:
fstream.getline(datsub.subline,size of(DataSubject));

SetDlgItemText(hDlg,IDC_EDIT1_1,dat sub.marks[0]);
...... SetDlgItemText(hDlg,IDC_EDIT1_...., datsub.marks[N1]);

Он мне в каждый EDIT считывает весь файл.
Iogan Gamba Puti вне форума Ответить с цитированием
Старый 08.05.2008, 11:53   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

И нечего так удивляться
Когда Вы делали Get*, строки в массив записывались с нулём на конце. Когда записывали в файл (который наверняка был открыт как текстовый) нули "пропали", и после чтения его на старое место строка "слилась" в одну. А в Set* нужно передавать строку с завершающим нулём, который теперь один на весь массив.
B_N вне форума Ответить с цитированием
Старый 08.05.2008, 15:20   #3
Iogan Gamba Puti
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 10
По умолчанию

Спасибо,я понял.Чтобы теперь из этой общей строки извлечь какое-нибудь поле,надо реализовать метод
Код:
class Object{
public:
	virtual void Clear()=0;
	virtual void DoOneString()=0;
	virtual ~Object() {}
};
class Subject:public Object{
	char buf[SUB_TOTAL_SIZE];
public:
	Subject() {Clear();}

	void Clear() {
		//memset(datsub.marks,' ',SUB_TOTAL_SIZE);
		for(int i=0;i<30;++i){
			for(int j=0;j<2;++j){
		      datsub.marks[i][j]=' ';
			}
		}
		
	}
    
	void DoOneString() {
		int count=0;
		for (int i=SUB_TOTAL_SIZE-1;i>0;--i)
			if (!datsub.subline[i])
				if(!count) count++;
				else datsub.subline[i]=' ';
		
	}
const char* GetMark(int number) {
		memcpy(buf,datsub.marks[number],N2);
		buf[N2-1]=0;
		return buf;
	}

    
	DataSubject datsub;
};
....
SetDlgItemText(hDlg,IDC_EDIT1_1,subitem.GetMark(0));
....
Теперь всё нормально,в поле Edit_1_1 считывается только нужный кусок файла.Кстати,позаимствовано с книги Юрия Щупака win32api(стр 353).Кому интересно взгляните.
Iogan Gamba Puti вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив Айвенго PHP 2 22.02.2008 16:34
Массив. С++ bloo[d] Помощь студентам 2 12.12.2007 23:30
Массив vitalik007 Помощь студентам 15 17.10.2007 19:56
Массив Snake_ua Помощь студентам 2 15.10.2007 07:04
Массив Dude Помощь студентам 2 13.06.2007 14:11