Помогите Найти Ошибку

Тема в разделе "C/C++/C#", создана пользователем AnnaSemenova, 19 сен 2012.

  1. AnnaSemenova

    AnnaSemenova Гость

    Код (C++):
     
    Помогите пожалуйста исправить ошибку! Практиковалась с записью в файл и решила создать программу, позвляющую записать в файл с переменным именем.
    Проверяю на простейшем коде, для чего создаю целочисленную переменную и символьный массив - имя файла, в который надо ввести ту или иную строку. Имя файла должна выглядеть в итоге так:
    C:/Astr/hello(символ, равный значению i).txt
    Для этого определенным элементом массива пытаюсь сделать переменную i, приведенную к символьному типу при помощи преобразования типов. Компилятор проглатывает это без возражений. компилирует, линкует.
    Но при запуске программы файл не создается и ничего туда не записывается
    вот код:

    #include <iostream>
    #include <fstream>

    using namespace std;

    int main()
    {
    //char file_name [32]="C:/Astr/hello1234567890abcd.txt";
    char file_name1[64];
    int i=1;
    Код (C++):
    file_name1[0]='C';
    file_name1[1]=':';
    file_name1[2]='/';
    file_name1[3]='A';
    file_name1[4]='s';
    file_name1[5]='t';
    file_name1[6]='r';
    file_name1[7]='/';
    file_name1[8]='h';
    file_name1[9]='e';
    file_name1[10]='l';
    file_name1[11]='l';
    file_name1[12]='0';
    //cout<<"input number"<<'\n';
    //cout<<1<<'\n';
    //cin>>file_name1[13];
    file_name1[13]=char(i);
    file_name1[14]='.';
    file_name1[15]='t';
    file_name1[16]='x';
    file_name1[17]='t';
    file_name1[18]='\0';
    ofstream fout;
    fout.open(file_name1);
    fout << "Hello world!" << '\n';
    fout.close();
    return 0;
    }
    компилятор для С++ из code::blocks<pre><code class="cpp"></code></pre>
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    #include <sstream>
    #include <fstream>
    #include <iostream>
    int main() {
    std ::stringstream sstr;
    std ::ofstream ofst;
    char fname[255];

    std ::cin >> fname;
    sstr << "C:\\TP\\hello" << fname << ".txt";
    sstr .getline(fname, 255);

    ofst .open(fname);
    ofst << "1";
    ofst .close();

    return 0;
    }
    Для создания файла нужно чтобы каталог существовал. (в моем коде это C:\TP)
     
  3. AnnaSemenova

    AnnaSemenova Гость

    А что означает sstr?
    Кроме того, хотелось бы не просто бездумно копировать код, но и понять, что же все-таки у меня неправильно было.
    И еще одна проблема. Знай я заранее, как назвать файл, вопроса бы не возникло. Но возникает новая задача:
    В ходе очередной программы мне надо записывать однотипные данные в последовательность файлов, отличающихся именем, вроде "C:/Astr/hello1", "C:Astr/hello2" и так далее. Можно ли это организовать в цикле, или же каждый ввод в каждый файл придется прописывать вручную?
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    так в коде все написано:
    Код (Text):
        std ::stringstream sstr;
    т.е. sstr - экземпляр класса stringstream
    http://cplusplus.com/reference/iostream/stringstream/

    у меня там имя файла формируется из "C:\\TP\\hello" потом идет строка, введенная пользователем, потом ".txt";
    Вместо строки, введенной пользователем можно впихнуть что угодно.

    все возможно: :)
    Код (Text):
    #include <sstream>
    #include <fstream>
    int main() {
    std ::stringstream sstr;
    std ::ofstream ofst;
    char fname[255];

    for (int i = 0; 5 > i; ++i) {
    sstr .clear();
    sstr << "C:\\TP\\hello" << i << ".txt";
    sstr .getline(fname, 255);

    ofst .open(fname);
    ofst << i;
    ofst .close();
    }

    return 0;
    }
    Код (Text):
    file_name1[13]=char(i);
    если I будет равно нулю - строка "обрежется", Если 0<=i<=9, то можно писать file_name1[13] = char(i+'0'); но не хорошо каждый символ строки задавать руками как элемент массива, ведь есть строки )

    Код (Text):
     file_name1[2]='/';
    может быть я не прав, но я опасаюсь использования таких слешей, пишу вместо них 2 прямых, я не уверен что win всегда это верно воспринимает.

    а у Вас существовал целевой каталог? - может быть поэтому и не работало? А если каталог есть - то мне кажется ваша программа должна работать если вводить адекватные значения i (посмотреть в таблице кодов), попробуйте, например, int i=49;
     
Загрузка...
Похожие Темы - Помогите Найти Ошибку
  1. OlgaZag
    Ответов:
    1
    Просмотров:
    1.292
  2. OlgaZag
    Ответов:
    0
    Просмотров:
    524
  3. Google313
    Ответов:
    0
    Просмотров:
    1.001
  4. Marikd
    Ответов:
    2
    Просмотров:
    1.210
  5. ruivit
    Ответов:
    2
    Просмотров:
    1.330

Поделиться этой страницей