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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2010, 04:32   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Не входит в тело цикла

Доброго времени суток уважаемые форумчане, собственно возникло затруднение с одним моментиком кода...
При трассировки я не знаю по каким причинам не происходит вхождение в тело цикла do while, либо я чего-то намудрил, либо это MVS 2008 глючит ?
Тупо проходится по файлам, а внутрь к себе заглянуть ему походу впадлу...

Код:
void Execute::TSearchFile()
{
	printf("[SEARCH FILE]\n Name: "); gets(wwf.lpSearchFile);

	if (strlen(wwf.lpSearchFile) > szCHAR)
	{ MessageBoxA(NULL, "The file name exceeds limit of char!", "Error!", MB_OK); }

	_finddata32_t secondfinddata; 

	int kFile = 0;
	char *File = "\\*.*"; 
	
	if ( GetCurrentDirectoryA(sizeof(szPATH), szPATH) )
	{  
		lstrcatA(szPATH, File);

		long hSecondFind = _findfirst32(szPATH, &secondfinddata);

		if (hSecondFind != -1)
		{
			do
			{
				if (kFile > 2) 
				{
					if (secondfinddata.name == wwf.lpSearchFile)
					{
						printf("\"Required file: %s\"", secondfinddata.name);
						break;
					}
				}
				kFile++;
			}
			while ( _findnext32(hSecondFind, &secondfinddata) == 0 ); 		
	    }
		_findclose(hSecondFind);
	}

	printf("\n"); this->TSelect();
}
Здесь как не странно все отлично работает

Код:
void Execute::TContent()
{
	_finddata32_t finddata; // Указатель на структуру _finddata32_t
	int kFile = 0;
	char *File = "\\*.*"; // Маска
	
	if ( GetCurrentDirectoryA(sizeof(szPATH), szPATH) ) // Получаем текущую директорию
	{  
		lstrcatA(szPATH, File); // Копируем маску к текущей директории

		long hFind = _findfirst32(szPATH, &finddata);

		if ( hFind != -1 ) // Во избежании утечки ресурсов
		{
			do
			{
				if (kFile > 2) // Пропускаем "." - текущий каталог, ".." - каталог выше
				{
					printf("[%2d] - %s\n", kFile - 2, finddata.name);
				} 
				kFile++;
			}
			while ( _findnext32(hFind, &finddata) == 0 ); // Пока есть файлы
		}
		_findclose(hFind);
	}
	printf("\n"); this->TSelect();
}

Последний раз редактировалось coNsept; 24.05.2010 в 04:35.
coNsept вне форума Ответить с цитированием
Старый 24.05.2010, 08:52   #2
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Скорее всего глючит, хотя бы раз вхождение должно проходить, при условии конечно, что выполнится условие
Код:
if (hSecondFind != -1)
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 24.05.2010, 12:10   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Это условие выполняется
Кстати что заметил интересное, если убрать в сравнение secondfinddata.name и сделать примерно следующие тогда он начинает работать...
Как будто производить сравнение с данными структуры _finddata32_t запрещено и компилятор уже знает за ранее что где и как там...
Может это не глюк, мож действительно нельзя ?

Код:
if (wwf.lpSearchFile == "EOF.ini")
{
    printf("\"Required file: %s\"", secondfinddata.name);
    break;
}
coNsept вне форума Ответить с цитированием
Старый 24.05.2010, 13:15   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну, что скажу точно, так это то, что так строки сравнивать нельзя. Используйте strcmp, она возвращает 0, в случае когда строки равны.
netrino вне форума Ответить с цитированием
Старый 24.05.2010, 13:43   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

netrino вы на высоте, спасибо, теперь все работает как надо
Я просто совсем не давно перешел на MVS 2008, а раньше работал на CodeGear'е, дак так была структура TSearchRec где можно было сравнивать её name со строками.
coNsept вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27
Тело, брошенное под углом к горизонту blackberryx Паскаль, Turbo Pascal, PascalABC.NET 9 14.05.2009 01:43
Тело по наклонной Lemo Помощь студентам 0 09.04.2009 15:50
вставка в тело тригера INTITY_INSERT Pitbull SQL, базы данных 0 21.02.2008 23:45