Форум программистов, компьютерный форум CyberForum.ru

Не могу выполнить поиск - C++

Восстановить пароль Регистрация
 
asql
74 / 75 / 25
Регистрация: 03.06.2014
Сообщений: 446
03.06.2014, 14:55     Не могу выполнить поиск #1
Не давно начал изучать С++(до этого изучал только веб), и можно сказать с уверенностью что он запутаннее и сложнее чем ПХП или яваскрипт. В общем, решил попрактиковаться и сделать поиск, но функция отвечающая за поиск файлов "непонятно" себя ведет!


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <windows.h>
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
 
 
  void findDirect(string direct){
    string Path=direct, rmmp;   
            
            WIN32_FIND_DATA FindFileData;
            HANDLE hf;
            rmmp=Path+"*";
             hf=FindFirstFile(rmmp.c_str(), &FindFileData);
             if (hf!=INVALID_HANDLE_VALUE)
        {
                do
                { 
                direct  += FindFileData.cFileName; 
 
                 
                  if((FindFileData.dwFileAttributes  & FILE_ATTRIBUTE_HIDDEN)==0){ 
            cout << "Path file:  "<<direct<<endl;            
            findDirect(direct+"\\");
 
        }
            
                direct=Path;  
                
 
                }
 
                while (FindNextFile(hf,&FindFileData)!=0);
 
                FindClose(hf);
        }
    cout<<"________________________"<<endl;
 
    
 }
 
 
int main()
{
 
 
 
 
 DWORD Disks = GetLogicalDrives();
char temp[2];
stringstream ddfir;
 
    for(int dc = 0; dc < 32; dc++)
    {
        if (Disks & (1<<dc))
        {           
            temp[1]=0;
            temp[0]='A'+dc;
            ddfir<<temp;
            cout<<ddfir.str()+":\\"<<endl;
            findDirect(ddfir.str()+":\\");
            ddfir.str("");
            Sleep(1000);
             
             
        }
    }
system("pause");
return 0;
}
какое то "непонятное" зацикливание идет у нее

Добавлено через 5 минут
Цитата Сообщение от asql Посмотреть сообщение
Disks & (1<<dc)
и что это за символ & и <<
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.06.2014, 15:16     Не могу выполнить поиск #2
Цитата Сообщение от asql Посмотреть сообщение
и что это за символ & и <<
& оператор И
<< оператор сдвига
Disks & (1<<dc) выделяет бит номер dc в переменной Disks
1<<dc возвращает число 100..{dc штук}..0 (двоич.)

оператор & "накладывает" оператором "И" одно число на другое
то есть побитово производит с каждым битом левого и правого операнда операцию "И"
оператор "И", как известно, возвращает 1 только, если оба его операнда единицы в соответствующей позиции
а так как правый операнд (как показано выше) имеет вид 000100...0 .
То вне зависимости от значения левого операнда Disks выражение вернёт значение вида
000x00...0 , где x равен 1 только если соответствующий бит Disks тоже равен 1, иначе 0

Итого: выражение if (Disks & (1<<dc)) выполнит условие только если бит номер dc переменной Disks равен 1
asql
74 / 75 / 25
Регистрация: 03.06.2014
Сообщений: 446
04.06.2014, 09:17  [ТС]     Не могу выполнить поиск #3
могу ли я больше узнать где то об этих спец символах?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
04.06.2014, 10:20     Не могу выполнить поиск #4
asql, что же в них такого "специального"? Достаточно просто учить язык не обрывками на уроках в школе, а последовательно и с толком, читать книги, не торопясь, не пытаясь выучить язык за неделю! Тогда никакие "спецсимволы" не станут для тебя сюрпризом!
asql
74 / 75 / 25
Регистрация: 03.06.2014
Сообщений: 446
05.06.2014, 09:34  [ТС]     Не могу выполнить поиск #5
ИМХО лучшее изучение - практика

Добавлено через 22 часа 18 минут
http://ru.wikipedia.org/wiki/Операторы_в_C_и_C++
Yandex
Объявления
05.06.2014, 09:34     Не могу выполнить поиск
Ответ Создать тему
Опции темы

Текущее время: 01:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru