Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
15 / 15 / 3
Регистрация: 18.05.2019
Сообщений: 851

При включении цикла while программа неправильно работает

04.11.2019, 10:03. Показов 657. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Непонятное поведение программы при работе цикла while.

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#define _CRT_SECURE_NO_WARNINGS
 
#define _UNICODE
// тестовая программа.
#include <iostream>
#include <conio.h>
//#include <tchar.h>
#include <stdio.h>
//#include <locale.h>
#include <windows.h>
 
struct file
{
    wchar_t filePathName[MAX_PATH];
    int fileAttribute;
    LONGLONG fileSize;  
    FILETIME fileTimeCreate;
};
 
int main()
{
    HANDLE hFind;
    wchar_t filePath[MAX_PATH];
    WIN32_FIND_DATAW wfd;
    //FILETIME ft;
    SYSTEMTIME st;
    int sizeArrfile=0;
    int index=0;
    
    GetCurrentDirectoryW(sizeof(filePath),filePath);
    SetCurrentDirectoryW(filePath);
 
    wcscat(filePath, L"\\*.*");
    std::wcout << filePath;
    std::wcout << std::endl;
 
    hFind = FindFirstFileW(filePath, &wfd);
    setlocale(LC_ALL, "");
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            sizeArrfile++;
        } while (NULL != FindNextFileW(hFind, &wfd));
        FindClose(hFind);
    }
 
    file *fileArray = new file[sizeArrfile];    
    
    hFind = FindFirstFileW(filePath, &wfd);
    //setlocale(LC_ALL, "");
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
                wcscpy(fileArray[index].filePathName, wfd.cFileName);
 
                fileArray[index].fileAttribute=wfd.dwFileAttributes;
 
                LONGLONG nFileLen = 0;
                {
                nFileLen = (wfd.nFileSizeHigh * (MAXDWORD+1)) + wfd.nFileSizeLow;
                fileArray[index].fileSize=nFileLen;
                }
    
                fileArray[index].fileTimeCreate=wfd.ftCreationTime;
                index++;
 
        } while (NULL != FindNextFileW(hFind, &wfd));
                FindClose(hFind);
    }       
 
        int i=0;
            while(i<index)
            {
                if(fileArray[i].fileAttribute & FILE_ATTRIBUTE_DIRECTORY)
                {
                    std::wcout << fileArray[i].filePathName << "  ";
 
                    int j=0;
                    while(j<260)                                                        // этот цикл.
                    {
                        std::wcout << fileArray[i].filePathName[j];
                        j++;
                    }
 
                    std::wcout << "<katalog>  ";
 
                    FileTimeToSystemTime(&fileArray[i].fileTimeCreate, &st);
                    printf("created on: %02d.%02d.%d %02d:%02d", st.wDay, st.wMonth, st.wYear, st.wHour, st.wMinute);
 
                    std::wcout << std::endl;
                }
                i++;
            }
            delete [] fileArray;
 
    _getch();
    return 0;
}
C++
1
2
3
4
5
6
                    int j=0;
                    while(j<260)                                                          
                    {
                        std::wcout << fileArray[i].filePathName[j];
                        j++;
                    }
цикл должен вывести посимвольно содержимое fileArray[i].filePathName.
но этого не происходит, и не работает другая часть программы.



если закоментировать while.



что не так ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.11.2019, 10:03
Ответы с готовыми решениями:

При условии цикла WHILE m > 0 программа не работает
Имеем такую программу: uses Crt; var m, S: integer; begin ClrScr; while m &gt;= 0 do begin S:= S + m; write(' Ввод...

Почему при переопределении свойства ForeColor программа работает неправильно?
Почему при переопределении свойства ForeColor программа работает неправильно, но если определить собственное свойство, решающее ту же...

Программа неправильно работает при запуске через Планировщик Заданий
Это тоже тема, которая могла оказаться в разделе Windows, но, мне кажется, больше она подходит суда. Есть код. При простом запуске...

6
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
04.11.2019, 10:13
DenAlpetyan, почему выбрал такой неудобный формат хранения строки ? Почему не std::wstring ?

тогда и вывод будет проще std::wcout << fileArray[i].filePathName

Добавлено через 1 минуту
я сильно подозреваю, что выводишь мусор, а консоль его понимает как управляющие коды
0
15 / 15 / 3
Регистрация: 18.05.2019
Сообщений: 851
04.11.2019, 10:14  [ТС]
Алексей1153, я пока не использую STL.
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
04.11.2019, 10:21
DenAlpetyan, неплохой повод, чтобы начать

Попробуй так
C++
1
2
3
4
5
const size_t count=sizeof(fileArray[i].filePathName)/sizeof(*fileArray[i].filePathName);
for(size_t j=0; j<count && fileArray[i].filePathName[j]; j++)
{
    std::wcout << fileArray[i].filePathName[j];
}
1
15 / 15 / 3
Регистрация: 18.05.2019
Сообщений: 851
04.11.2019, 10:41  [ТС]
Алексей1153, не совсем понятно как это работает.

я так понимаю это связано с двух байтовостью wchar_t.

по этому const size_t count=sizeof(fileArray[i].filePathName)/sizeof(*fileArray[i].filePathName);

а почему логическое и && fileArray[i].filePathName[j]; j++ ?
0
фрилансер
 Аватар для Алексей1153
6472 / 5687 / 1131
Регистрация: 11.10.2019
Сообщений: 15,167
04.11.2019, 10:44
Цитата Сообщение от DenAlpetyan Посмотреть сообщение
&& fileArray[i].filePathName[j]
когда встретится нулевой символ, вывод прекратится
0
15 / 15 / 3
Регистрация: 18.05.2019
Сообщений: 851
04.11.2019, 10:45  [ТС]
Алексей1153, понятно, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.11.2019, 10:45
Помогаю со студенческими работами здесь

При нажатии Enter при фокусе в нижнем QTextEdit печатать "Ok" в консоль (программа неправильно работает)
require 'Qt4' class Test&lt;Qt::TextEdit def keyPressEvent(e) if(e.key()==Qt::Key_Enter || e.key==Qt::Key_Return) ...

Остановка цикла при повторном включении макроса
Здравствуйте! Пожалуйста помогите. Уже давно не могу разрешить эту проблему. Значит, имеется макрос. При соблюдении условия включается...

Завершение цикла при вводе "end", не работает программа
Здравствуйте. Почему код не делает то, чего я от него прошу? Ну, то есть, прекращать ввод как только будет введено &quot;end&quot;. ...

Неправильно работает программа
Может что-то нужно дописать в мэйн? using System; using System.Collections; using System.Collections.Generic; using...

Программа работает неправильно
Условие: Определить, есть ли среди последовательности N целых чисел (1 &lt; N &lt;= 100) хотя бы одна пара одинаковых соседних элементов....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru