как из блока if передать значение переменной в блок else в С/С++
Мне нужно из блока if передать правильное значение переменной backup_dir в блок else. Если просто написать эту переменную в блоке else то она будет пуста, я думаю всем понятно почему. Так вот как это сделать? Наверняка необходимо использовать указатели или же ссылки, я пробовал, но у меня не получилось.
if (handle != INVALID_HANDLE_VALUE)
{
do
{
if (strcmp(".", fd.cFileName) != 0 && strcmp("..", fd.cFileName) != 0)
{
if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
char res[MAX_PATH] = { '\0' };
sprintf(backup_dir, "%s\\%s", "bin\\backup", fd.cFileName);
CreateDirectory(backup_dir, NULL);
fast_move_files(res, path_for_dir);
}
else
{
sprintf(backup, "%s\\%s", "bin\\backup", fd.cFileName);
printf("back-up path %s\n", backup);
std::ofstream f(backup, std::ios::app);
}
}
} while (FindNextFile(handle, &fd));
Ответы (1 шт):
во-первых у каждой переменной есть область видимости, т.е. откуда к ней можно обратиться
к переменной, определённой внутри скобок {...} можно обратиться только внутри этих же скобок (всякую экзотику не рассматриваем),
поэтому когда вы переменную определили в блоке else - то это именно переменная в блоке else и к другим переменным выше отношения не имеет
поэтому чтобы иметь доступ к переменной и из if блока и из else ее надо определить выше
char backup_dir[MAX_PATH];
if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
// backup_dir видна и тут
}
else
{
// backup_dir видна и тут
}
А во вторых и это более важно - если ваше условие истинно, то вы входите только в if {...} и не входите (не будет выполняться) в else {...}
так что если вы что-то записали в одном блоке, во втором вы этим не сможете воспользоваться потому что просто сам блок не будет выполняться - только один или другой блог (дудочка и кувшинчик :))
Возможно вы хотите как-то использовать переменную backup_dir внутри цикла while, тогда ее надо поднять еще выше:
char backup_dir[MAX_PATH];
do
{
if (strcmp(".", fd.cFileName) != 0 && strcmp("..", fd.cFileName) != 0)
{
if (fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
// если backup_dir была изменена тут
}
else
{
// но в одном из этапов цикла `while` backup_dir можно использовать и тут
// только надо проверить, что переменная содержит значение, ведь это условие может сработать раньше, чем условие выше, где переменной присваивается значение и создаётся папка
}
}
} while (FindNextFile(handle, &fd));