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

Как указать имя файла в fstream через string и функцию? - C++

Восстановить пароль Регистрация
 
vitaliy2034
1 / 1 / 1
Регистрация: 14.01.2016
Сообщений: 26
Завершенные тесты: 1
14.01.2016, 11:11     Как указать имя файла в fstream через string и функцию? #1
Я написал програму которая переводит системы исчесления(2-36).Програма роботает на ура ,но я хотел сделать историю, а поскольку хотелось чтобы имя истории было равносильно текущему времени для этого я написал функцию my_time_for_his (я знаю можно было проще ,но на даный момент итересует пример с функцией) и файл истрии вопще не создаётся. НО компилятор молчит не говорит что есть ошибки.В чём проблема? Помогите!Вот код
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
133
134
135
136
137
138
#include<iostream>
#include<fstream>
#include<conio.h>
#include<string>
#include<time.h>
using namespace std;
string rax(long long digit,short d_sis );
string my_time_for_his();
string file_name = my_time_for_his() + "d.txt";//здесь в чёмто проблема но в чём
ofstream outt (file_name.c_str());
int main() {
    setlocale(LC_ALL, "Ukrainian");
    cout << file_name.c_str();
    short digit_s[34] = { 0 };
    system("color 2b");
    long long inp;
    outt << "\t\t\t\tПеревод в системи числення(2 - 36)";
    while (true)
    {
        cout << "\t\t\t\tПеревод в системи числення(2-36)\n\n\n\nВведiть число:\n";
        outt << "\n\n\n\nВведiть число:\n";
        for (;;) {
            if (!(cin >> inp)) {
                cout << "Спробуйте ще раз:\n";
                cin.clear();
                while (cin.get() != '\n');
            }
            else
            {
                outt << inp<<endl;
                break;
            }
        }
        for (short i = 2; i <= 36; i++)
        {
 
            outt << "Число " << inp << " в " << i << "-iй системi числення є: " << rax(inp, i) << endl;
            cout << "Число " << inp << " в " << i << "-iй системi числення є: " << rax(inp, i) << endl;
        }
 
        char choice2;
        cout << "Продовжити Так-у або Нi - n\n";
        if ((cin >> choice2) && choice2 == 'y')
        {
            system("cls");
        }
        else
        {
            cout << "Допобачення";
            _getch();
            exit(0);
        }
    }
    _getch();
    return 0;
}
string my_time_for_his(){
    string result;
    unsigned short Ar_date[3] = { 1970,1,1 };
    unsigned long long sekyndu = time(0);
    unsigned short A_time[2] = { 0,0 };
    const unsigned int w_const[3] = { 31536000,31622400,86400 };
    bool prov=false;
    while (true)
    {
        if (Ar_date[0]%4==0)
        {
            sekyndu -= w_const[1];
            Ar_date[0]++;
            if (sekyndu < w_const[1])
            {
                break;
            }
            continue;
        }
        if(Ar_date[0] % 4 != 0)
        {
            sekyndu -= w_const[0];
            Ar_date[0]++;
            if (sekyndu<w_const[0])
            {
                break;
            }
        }
    }
    if (Ar_date[0] % 4 == 0) 
        prov = true;
    unsigned short mount[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (prov == true)
        mount[1] = 29;
    for (short i = 0; i < 12; i++)
    {
        
        if (sekyndu >= mount[i] * w_const[2]) {
            sekyndu -= mount[i] * w_const[2];
            Ar_date[1]++;
        }
        else
        {
            while (sekyndu>=w_const[2])
            {
                sekyndu -= w_const[2];
                Ar_date[2]+=1;
            }
 
            break;
        }
    }
    while (sekyndu>=3600)
    {
        sekyndu -= 3600;
        A_time[0]++;
    }
    while (sekyndu>=60)
    {
        sekyndu -= 60;
        A_time[1]++;
    }
    
    result = to_string(Ar_date[2])+"_"+ to_string(Ar_date[1]) + "_"+to_string(Ar_date[0]) + "/"+ to_string(A_time[0]+=2) + ":"+to_string(A_time[1]) + ":"+ to_string(sekyndu) + "|";
    return result;
}
string rax(long long digit,short d_sis) {
    string result2;
    string temp;
    string all_d[37] = { "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    while (digit!=0)
    {
        temp += all_d[digit%d_sis];
        digit -= digit%d_sis;
        digit /= d_sis;
    }
    for (size_t i = 1; i <= temp.length(); i++)
    {
        result2 += temp[temp.length() - i];
    }
    return result2;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Apostol584
234 / 140 / 71
Регистрация: 26.11.2012
Сообщений: 363
Завершенные тесты: 2
14.01.2016, 12:26     Как указать имя файла в fstream через string и функцию? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
имя файла не должно содержать \/:*?<>|".
Это для чего?
C++
1
string all_d[37] = { "0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
Так по-моему лучше
C++
1
string all_d= "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
m1Rr0r
 Аватар для m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,213
Завершенные тесты: 2
14.01.2016, 12:36     Как указать имя файла в fstream через string и функцию? #3
Цитата Сообщение от vitaliy2034 Посмотреть сообщение
ofstream outt (file_name.c_str());
Сделай debug вывод
C++
1
cout << file_name << endl;
Ну и не лишним будет проверять вообще открылся ли файл:
C++
1
2
3
if(!outt.is_open() ) {
// Не открылся файл
}
nord_v
227 / 176 / 69
Регистрация: 22.08.2013
Сообщений: 723
14.01.2016, 12:39     Как указать имя файла в fstream через string и функцию? #4
Цитата Сообщение от vitaliy2034 Посмотреть сообщение
string file_name = my_time_for_his() + "d.txt";//здесь в чёмто проблема но в чём
В отладчике посмотри, что в file_name получается.
Apostol584
234 / 140 / 71
Регистрация: 26.11.2012
Сообщений: 363
Завершенные тесты: 2
14.01.2016, 13:11     Как указать имя файла в fstream через string и функцию? #5
C++
1
2
3
4
5
6
7
8
9
10
string my_time_for_his(){
    time_t rawtime;
    struct tm * timeinfo;
    time(&rawtime);
    timeinfo = localtime(&rawtime);
    char* format = "%d_%m_%Y %H-%M-%S ";
    char buffer[80];
    strftime(buffer, 80, format, timeinfo);
    return buffer;
}
GbaLog-
Не Эксперт C++
1473 / 618 / 174
Регистрация: 24.08.2014
Сообщений: 2,522
Записей в блоге: 1
Завершенные тесты: 2
14.01.2016, 13:45     Как указать имя файла в fstream через string и функцию? #6
Если функция my_time_for_his просто возвращает текущее время, то вот так короче.
C++
1
2
3
4
5
6
7
#include <ctime>
...
string my_time_for_his() {
    time_t t;
    time(&t);
    return ctime(&t);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2016, 14:47     Как указать имя файла в fstream через string и функцию?
Еще ссылки по теме:

Как поэлементно считать текст с файла с помощью fstream, и сохранить каждый символ в массив? C++
C++ Как начать чтение файла сначала после Getline с первой строчки в fstream?
Как задать путь для файла в fstream? C++

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

Или воспользуйтесь поиском по форуму:
vitaliy2034
1 / 1 / 1
Регистрация: 14.01.2016
Сообщений: 26
Завершенные тесты: 1
14.01.2016, 14:47  [ТС]     Как указать имя файла в fstream через string и функцию? #7
Apostol584, спасибо за подказку с файлами.Выручил.
Yandex
Объявления
14.01.2016, 14:47     Как указать имя файла в fstream через string и функцию?
Ответ Создать тему
Опции темы

Текущее время: 21:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru