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

Консоль. Завершение цикла нажатием клавиши - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить максимальную среди сумм чисел в треугольнике.Использовать 1)рекурсию 2)динамически. http://www.cyberforum.ru/cpp-beginners/thread229345.html
Пути в числовом треугольнике начинаются от верхнего числа. От любого числа можно перейти к одному из двух соседних чисел в следующей строке. Вычислить максимальную среди сумм чисел, расположенных на путях, заканчивающихся каким-нибудь числом в основании треугольника, и найти один из путей с этой суммой. В следующем треугольнике он образован выделенными числами: 7 3 8 8 1 0 2 7 ...
C++ Форматированный ввод Есть ли какая-либо функция, фильтрующая входящий поток? Подобно scanf, если не ошибаюсь, там можно сделать так: % - будут вводиться только цифры Мне нужно именно в c++ (cin) типа cin.ignore(); - только чтобы можно было ввести только цифры нужно весь алфавит переписать) http://www.cyberforum.ru/cpp-beginners/thread229328.html
stdin, stdout, stderror C++
Эти три файловых дискриптора, получаемые программами при запуске они указывают на реальные файлы, который файловая система создает? Когда я связываю stdin одной программы с stdout другой программы, то происходит следующее одна программа пишет в файл, а другая считывает данные из этого же файла, всё верно? Еще хотел бы спросить про консоль. Консоль слушает клавиатуру. Когда я запускаю...
C++ Удалить часть строки
В заданной строке нужно заменить все пары "АВ" на "С". Я вот не знаю что написать после if. #include "stdafx.h" #include <conio.h> #include <math.h> #include <cstring> void main() {
C++ Алгоритм Дейкстры http://www.cyberforum.ru/cpp-beginners/thread229306.html
Помогите найти ошибку плз. Первый шаг алгоритма выполняет правильно,а дальше-нет. #include<iostream> #include<fstream> #include<iomanip> #include<conio.h> using namespace std; int start,finish,n; int ves,metka; bool used;
C++ Даны сведения о 20 владельцах авто Помогите пожалуйста с 2-я задачами 1. Даны такие сведения о 10 человек: фамилия, пол и дата рождения (дата типа структура). Определить возраст каждого, и вывести на экран фамилии тех, кто достиг пенсионного возраста (мужчины старше 60, женщины - 55). 2. Даны такие сведения о 20 владельцах авто: фамилия водителя, марка машины, и ее номер (целое число), пробег (целое число). Найти фамилию... подробнее

Показать сообщение отдельно
final_headshot
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 7
19.08.2014, 17:47     Консоль. Завершение цикла нажатием клавиши
Помогите разобраться с ошибкой. Есть прога, которая считает количество файлов в папке и всех её внутренних папках. основная функция работает, но нужно чтобы в процессе подсчета файлов можно было нажать ESC и тогда подсчет остановился, а на экран вывелся текущий результат. я могу это сделать, но только для нажатия любой кнопки, а не конкретно ESC.
Определение функций:
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
#include "stdafx.h"
#include <string>
#include <io.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <conio.h>
using namespace std;
 
#include "folder.h"
 
Folder::Folder (string& w, int n):way(w), files(0), number(n)
{
}
 
int Folder::countf()
{
  struct _finddata_t info;
  intptr_t seek;   
  seek = _findfirst((way + "\\*").c_str(), &info); 
  if (seek == -1) return 0; //если в текущей папке ничего нет, возвращает ноль
  else
  {
    //два раза выполнение функции _findnext для пропуска папок "." и ".." 
    _findnext(seek, &info);
    _findnext(seek, &info);     
    //выполнять пока не закончатся файлы и папки или не будет нажата кнопка
    do
    {
      if (info.attrib==_A_SUBDIR)
      {     
        Folder *f = new Folder((way + "\\" +info.name), 0);
        files+=f->countf();
        delete f;       
      }   
      else if (info.attrib!=_A_SUBDIR)
      {
        files++;
      }       
      if (_kbhit())
      {
        return files;
      }
    }while (_findnext(seek, &info)==0);     
  }
  return files;
}
 
void Folder::print ()
{
  cout<<left<<setw(2)<<number<<setw(10)<<files<<" "<<setw(100)<<way<<endl;
}
 
void Folder::write (ofstream &of)
{
  of<<way<<"; "<<files<<endl;
}
основная программа:
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
#include "stdafx.h"
#include <string>
#include <fstream>
#include <iostream>
#include <conio.h>
#include "folder.h"
 
using namespace std;
 
 
int main(int argc, char* argv[])
{
  setlocale(LC_ALL, "Russian");
  string path;
  int i=1;
  ifstream PathFile(argv[1], ios::in);
  ofstream ResultFile(argv[2], ios::out);
  while (!PathFile.eof())
  {
    getline(PathFile, path);
    Folder *f = new Folder(path, i);
    f->countf();    
    if (!_kbhit()) 
    {
      f->print();
      f->write(ResultFile);
    }
    else 
    {
      cout<<"Выполнение прервано"<<endl;
      f->print();
      break;
    }
    i++;
  } 
  system("pause");
  return 0;
}
проверка нажатия клавиши происходит в функции countf(). если я заменю :
в определении countf() строки 40-43
C++
1
2
3
4
5
if (_kbhit())
      {
        if (_getch()==27)
          return files;
      }
в главном файле строки 23-33:

C++
1
2
3
4
5
6
7
8
9
10
11
if (!(_kbhit()&&_getch()==27)) 
    {
      f->print();
      f->write(ResultFile);
    }
    else 
    {
      cout<<"Выполнение прервано"<<endl;
      f->print();
      break;
    }
при нажатии на ESC и любые другие кнопки ничего не происходит. как мне реализовать задачу?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru