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

Проклятые потоки. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Захват видео с web-камеры http://www.cyberforum.ru/cpp-beginners/thread367004.html
Добрый день!Подскажите как лучше всего работать с web-камерой на С++. Какие библиотеки использовать, может есть какие-либо книги или статьи? Хочу реализовать программу которая будет осуществлять захват видео с удаленного хоста..
C++ сравнение значения в файле с вводимым вобщем задача в том чтобы состоялась проверка вводимого значения с содержащимся в файле,как сделать коректно эту проверку, подскажите пожалуйста. p.s. на кучу библиотек и переменных не обращайте внимания, они нужны для реальной работы программы, а не тестовой #include "stdafx.h" #include <stdio.h> #include <math.h> #include <iostream> #include <string.h> using namespace std; //int cool... http://www.cyberforum.ru/cpp-beginners/thread367003.html
C++ Найти радиусы вписанной и описанной окружностей треугольника
Задания для самостоятельной работы 1. Линейный вычислительный процесс 1. Треугольник задан длинами сторон. Найти длины высот. 2. Треугольник задан длинами сторон. Найти радиусы вписанной и описанной окружностей. 3. Хозяин хочет оклеить обоями квартиру. Определить количество необходимых рулонов и затрат на их приобретение. 4. В некотором треугольнике основание больше высоты на заданную...
C++ Решение 2 математических примеров на C++
Помогите решить данные задачи, как можно понятнее. Наградой будет 100 рублей на телефон, конечно маловато но возможности дать больше нет.
C++ запись в файл http://www.cyberforum.ru/cpp-beginners/thread366993.html
у меня есть программа которая использует плагины (20 плагинов) работающих одновременно. каждый плагин имеет свою длл(каждая длл имеет просто другое имя но так они идентичны). плагины пишут в файл при выходе из программы функции запись храняться в длл. char name = "C:\\fc\\name.txt"; char tbuf ;//. char buf ; int fpointer; DWORD err;//. DWORD fcount;
C++ Найти первый вход элемента Задача: найти первый вход элемента массива В в массив А. На входе подаются два массива: массив А и массив В. Требуется вывести индекс массива В, где первый раз встретился похожий элемент. Например: А: 1 2 3 4 5 6 В: 1 2 3 4 5 Выведет ответ 0, т.к. первый вход массива В в массив А это 1, а она на нулевой позиции. Вот моя функция, которая неправильно выводит ответ. подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,265
16.10.2011, 11:33     Проклятые потоки.
Короче, так, судя по всему кривая getline ()

Вот я специально набросал код, там строки читаются, и первая строка -1 с помощью getline читается корректно. В неё действительно 6 знаков, как и в файле. 4 пробела, потом '-' потом 1, и никакой 13 и 10-ки
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
#include <vector>
#include <iostream>
#include <string>
#include <fstream>
 
std::vector<std::string> readFile(std::ifstream& ifs)
{
        std::string str;
        std::vector<std::string> vec;
        while(std::getline(ifs, str))
                vec.push_back(str);
        return vec;
}
 
int main()
{
        std::string str= "list.txt";
        std::ifstream ifs(str.c_str());
        if(!ifs)
        {
                std::cerr<<"Error with open file "<< str <<'\n';
                return 1;
        }
        std::vector<std::string> vec=readFile(ifs);
        for(size_t i=0; i<vec.size(); ++i)
        {
 
                std::cout<<vec[i]<<'\n';
                if (!i)
                 printf ("vec[i].size()= %d\n",vec[i].size());
 
        }
        getchar ();  
        return 0;
}

А так чувак во многом прав, я тоже психовал, не наблюдая нормального перенаправления текстового файла в строку! Это надо же нормально не реализовать простой оператор перенаправления:

C++
1
myfstream>> str
, эта херь споткнётся о первый же символ 13
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
В общем, я сделал так, написал свой класс, который реализует данную конструкцию. Результат- строка-копия текстового файла, но без 13 (10-ки остались, но они корректны)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
//НУ короче такой вот класс служит единственно для того, чобы считать текстовый файл в 
//строку. Штатный оперетор перенаправления глючит, то есть
 
//string str;
//ifstrem f ("fail.txt");
//f>> str;
//По этому коду в str будет всё, что угодно только не заявдленное. ПРоисходит это потому
//что файловый поток спотыкается о первый непечатаемый символ. Это, кажись, перевод
//каретки на другую строку 
 
 
//                    Ф У Н К Ц И И
//Публичная функция перенаправления оператора (дрружественая) >>
//Конструктор (один принимает просто имя файла и всё)
 
//Использовать просто
//string str_0, str_1,str_2;
//myifstrem f ("ima_faila.txt");
//f>> str_0>> str_1;
//f>> str_2;
//Закрывать ничё не надо, по завершении оператора перенаправления f закроется сам
 
//Этот файл засунут в два места: в инклуды и в папку 
//мои_классы\мой_файловый_поток_myifstream
 
#ifndef MYIFSTREAM_H
#define MYIFSTREAM_H
 
#include <windows.h>
#include <iostream>
#include <fstream>
using namespace std;
 
class myifstream {
 
///+++++++++++++++++++++++++++++++++++
 private:
 
 
  char* ima_faila;
 
  ifstream f;
  long int Razmer_Faila;
 
  //функции пошли
  long int fRazmer_Faila (char* ima_faila);
 
///+++++++++++++++++++++++++++++++++++
 public:
 
  //конструкторы
  myifstream (char* p) {ima_faila= p;};
 
  friend myifstream & operator>> (myifstream & g, string& str); 
};
 
//+++++++++       определения функций     +++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
myifstream& operator>> (myifstream & g, string& str) {
 
 char temp_1, temp_2;
 
  
  //пытаемся открыть. Обязательно в бинарном режиме!
  g.f.open(g.ima_faila, ios::binary);
  if (!(g.f)) {
   cout<< "файл "<<g.ima_faila<<"  на чтение не открыт\n";
   return g;
  }
  //Устанавливаем соответтсвующий флаг
 
 //Так, размер файла ищем. КАждый раз по новой надо искать, ибо он может меняться
 g.Razmer_Faila= g.fRazmer_Faila (g.ima_faila);
 
  
 
 //Погнали считывать в строку
 //Тут есть одна фишка
 //при таком вот перегоне
 //fstream<< str
 //все символы, которые 0x0a преобразуются в 0x0d 0x0a
 //вывод:
 //Если в строке встретится 0x0d 0x0a, то 0x0d убираем          
 int i= 0;
 
 
 for (int i= 0; i< g.Razmer_Faila; i++ ) {
  temp_1= g.f.get();
  if (temp_1== 13) {
   temp_2= g.f.get();
   if (temp_2== 10) {
    str+= temp_2;
    i++;
   }
   else {
    str+= temp_1;
    str+= temp_2;
    i++;
   }
  } 
  else
   str+= temp_1;
 }
 g.f.close();
 return g;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
 
//+++++++++++++++А эта функция находит размер файла++++++++++++
long int myifstream::fRazmer_Faila (char* ima_faila) {
 HANDLE hFile;
 long int temp;
 hFile = CreateFile(ima_faila,0,FILE_SHARE_READ,NULL,OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,NULL);
 if (hFile== INVALID_HANDLE_VALUE) {
  cout<< "ничего не выйдет ибо не удаётся найти размер файла"<< endl;
  return EOF;
 }
 else {
  temp= (long int)GetFileSize(hFile, 0);
  CloseHandle (hFile);
  return temp; 
 }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
 
 
#endif
 
Текущее время: 01:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru