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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Annnettttt
0 / 0 / 0
Регистрация: 04.04.2014
Сообщений: 6
#1

Передача ofstream в функцию - C++

04.04.2014, 13:59. Просмотров 789. Ответов 7
Метки нет (Все метки)

Здравствуйте. Подскажите, пожалуйста, как сделать из участка с 54 по 62 строку отдельную функцию (также с 64 по 73, с 75 по 85, с 87 по 96). Спасибо!

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
using namespace std;
 
 int main()
 {
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
 
 char word[256];
 
  const int N5 = 3;
     char* arr5[N5] = {
     "goto",
     "setjmp",
     "longjmp"};
 
    int count=0;
    int i;
    int j;
 
    char filename[256];
 
    printf("Введите имя файла ");
    scanf("%s",&filename);
    ifstream wer(filename);
    if(!wer.is_open())
    {
        printf("Ошибка!\n");
        _getch();
        return -1;
    }
 
    while(!wer.eof())
    {
        wer.getline(word, 256);
        count++;
    }
    wer.close();
 
    ifstream wer2(filename);
    char ** dict=new char*[count];
    for(i=0;i<count;i++)
    {
        dict[i]=new char[256];
        wer2.getline(dict[i],256);
 
    }
    //delete [] dict;
    wer2.close();
 
               
    ofstream outFile;
    outFile.open ("Error.txt");
  
  outFile << "*******************************************************************" << "\n\n";
 for(i=0;i<count;i++)
  {
        if(strstr(dict[i],"{"))
          if((!(strstr(dict[i],"/"))) && (!(strstr(dict[i],"\\"))) && (!(strstr(dict[i],"="))))
        {
           outFile << "  " << i + 1 << " " << dict[i] << "\n";
        }
  }
 
  outFile << "\n";
  outFile << "*******************************************************************" << "\n\n";
 for(i=0;i<count;i++)
  {
     for(j = 0; j < N5; j++)
        if(strstr(dict[i],arr5[j]))
        {
           outFile << "  " << i + 1 << " " << dict[i] << "\n";
        }
  }
 
  outFile << "\n";
  outFile << "*******************************************************************" << "\n\n";
  char second[] = "{}();", *p;
  for(i=0;i<count;i++)
  {
    for (p = dict[i]; *p; ++p)
      if (strchr(second, *p))
        {
           outFile << "  " << i + 1 << " " << dict[i] << "\n"; 
        }
  }
 
  outFile << "\n"; 
  outFile << "*******************************************************************" << "\n\n";
 for(i=0;i<count;i++)
  {
        if(strstr(dict[i],"***"))
          if((!(strstr(dict[i],"/*"))) && (!(strstr(dict[i],"*/"))) && (!(strstr(dict[i],"//"))))
        {
           outFile << "  " << i + 1 << " " << dict[i] << "\n";
        }
  }
 
   outFile.close(); 
 
  system("pause");
 return 0;
 }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2014, 13:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача ofstream в функцию (C++):

Ofstream в структуре и передача этой структуры по функциям - C++
Добрый день. Задача следующая: есть структура, в данном случае - Ofstr. В ней *stream - поток на вывод. Путь передается в функцию...

Передача указателя на шаблонную функцию в другую функцию - C++
Пишу тест для нескольких улучшений квиксорта с измерением времени. Функция benchmark принимает итераторы для диапазона элементов, указатель...

Передача массива в функцию используя указатель на функцию - C++
У меня имеется готовая программа без передачи функции в функцию указателем, мне нужно передать функцию ввода масива в функцию его обработки...

Передача объекта в функцию или функцию друга - C++
Здравствуйте, уважаемые программисты :) К примеру есть такой код. #include &lt;iostream&gt; using namespace std; class My_Class1 { ...

Передача двухмерного массива из функцию в функцию - C++
Допустим у меня есть функция, в которой &quot;генерируется&quot; массив. Но нужно его передать в другую функцию, которая его выведет на экран. ...

Передача в функцию - C++
вот есть такие строки кода: typedef vector&lt; vector&lt;char&gt; &gt; string_sound; void sound_func(string_sound &amp;text_sound, int sum_words)...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IrineK
Заблокирован
04.04.2014, 14:22 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Логичней передача не потока, а имени файла, с которым нужно работать.
Как-то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void DataOut (char *filename, .......)
{   ofstream outFile (filename);
    //....
 
    outFile.close();
}   
 
int main ()
{ //...
    char filename[256];
    fgets (filename, 256, stdin);
    if (filename [strlen(filename)-1] == '\n')
        filename [strlen(filename)-1] == '\0'
 
    void DataOut (filename, ......);
 
    
 //...
}
P.S. scanf для строки - не есть гуд.
1
don_keyhot
5 / 5 / 2
Регистрация: 02.04.2014
Сообщений: 60
04.04.2014, 14:59 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Annnettttt,
как-то так
вот сама функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void write_out(ofstream &outFile, char **dict, int count)
{
    outFile << "*******************************************************************" << "\n\n";
    for (int i = 0; i < count; i++)
    {
        if (strstr(dict[i], "{"))
            if ((!(strstr(dict[i], "/"))) && (!(strstr(dict[i], "\\"))) && (!(strstr(dict[i], "="))))
            {
                outFile << "  " << i + 1 << " " << dict[i] << "\n";
            }
    }
}
а вот ее вызов из программы
C++
1
write_out(outFile, dict, count);
Добавлено через 3 минуты
IrineK, нет, Вы не правы в данном случае
там из программы к этой функции идет много вызовов, и если каждый раз в функции дергать поток, открывать, закрывать то это НЕ правильно.
1
IrineK
Заблокирован
04.04.2014, 15:06 #4
Цитата Сообщение от don_keyhot Посмотреть сообщение
идет много вызовов
Вы одновременно будете дергать поток этими вызовами или по очереди?
Если по очереди - значит все укладывается в один логический модуль.

Если не укладывается - что-то не так с логикой у того, кто кодил. )
0
don_keyhot
5 / 5 / 2
Регистрация: 02.04.2014
Сообщений: 60
04.04.2014, 15:15 #5
IrineK,
Цитата Сообщение от IrineK Посмотреть сообщение
Вы одновременно будете дергать поток этими вызовами или по очереди?
Если по очереди - значит все укладывается в один логический модуль.
Если не укладывается - что-то не так с логикой у того, кто кодил. )
согласен с Вами )
в программе нужно конечно нужно переносить в функцию гораздо больше строк, чем указано в условии, но я честно ответил: только на заданный вопрос, ничего лишнего, дабы не запутать новичка деталями которые ему пока не нужны )

Добавлено через 1 минуту
но я думаю она и сама догадается
0
Annnettttt
0 / 0 / 0
Регистрация: 04.04.2014
Сообщений: 6
05.04.2014, 13:07  [ТС] #6
Спасибо за помощь. Если позволите, еще вопрос.
А что бы Вы использовали вместо scanf для строки?
0
IrineK
Заблокирован
05.04.2014, 13:10 #7
См. пример
Цитата Сообщение от IrineK Посмотреть сообщение
fgets (filename, 256, stdin);
* * if (filename [strlen(filename)-1] == '\n')
* * * * filename [strlen(filename)-1] == '\0';
1
Annnettttt
0 / 0 / 0
Регистрация: 04.04.2014
Сообщений: 6
05.04.2014, 13:18  [ТС] #8
Спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 13:18
Привет! Вот еще темы с ответами:

Передача в функцию - C++
компилятор ругается на int sumcolumn (int **a, int n) sumcolumn(a,m) почему не могу передать массив i*1, таким образом? ...

Передача вектора в функцию - C++
Сабж. В главной программе есть структура: struct Complex { double Re; double Im; } com; и есть вектор: vector &lt;Complex&gt;...

Передача аргументов в функцию - C++
Хочу размерность массива задать в отдельной функции, но не получается разобраться с передачей аргументов. Поясните, а то самому пока не...

передача массива в функцию - C++
у меня в мейне есть двумерный массив нужно его передать в дургую функцию как это сделать подскажите плиз


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.04.2014, 13:18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru