Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Помогите


Автор: DimanLin 12.1.2009, 17:13
Код
#include <iostream>
#include <fstream>
#include <string>

int main()
{
    using namespace std;
    ifstream fin;
    fin.open("dic.dic");
    string temp;
    string mystr = "mystr";
    
    while(getline(fin, temp))
    {
        cout << temp << mystr << endl;
    }
        
    return 0;
}

Есть фаил dic.dic, внём расположенны строки:
asdasd
dfgdfg
ghjghjgh
rtyrty
werwrwe

Мне нужно к каждой строке дописать "mystring" и вывести на экран.

Модератор: Название темы должно отражать ее суть!

M
bsa
Пользуйся кнопкой "Код"

Автор: russians 12.1.2009, 17:22
DimanLin, не совсем понятно, что нужно.
Нужно:
a) открыть файл, в каждой строке дописать строку, сохранить файл и вывести его содержимое на экран...
или
б) отрыть файл, записать строку в temp, прибавить к temp строку и вывести на экран

Автор: DimanLin 12.1.2009, 17:54
Б!

Автор: pan2004 12.1.2009, 19:44
И что, не получается?

Автор: russians 13.1.2009, 00:28
DimanLin, а кто поток закрывать будет? smile
fin.close() добавь.
Если надо сконкатенировать строки, strcat(str, substr) используй (хотя мешать С и С++ не есть благо, в С++ используется для этого операция сложения "+", так что лучше используй её).

Автор: Kallikanzarid 13.1.2009, 01:11
Цитата

а кто поток закрывать будет?

Деструктор  smile 

Автор: DimanLin 13.1.2009, 13:19
Цитата(pan2004 @ 12.1.2009,  19:44)
И что, не получается?

Вот что в поток валится:
mystrf
mystrfo
mystrgomez
mystrj
mystrkd
mystrla
mystrlako
mystrlaz
mystrlili
mystrlin
mystrlot
mystrluis
mystrm
mystrmn
mystrr
mystrroma
mystrs
mystrsa

Т.е сначало пишется слово из файла а потом коретка отходит назад и поверх этого слова пишется "mystr", далее переход на новую строку и всё сначало. Сам не пойму как так... Но он так делает.

Автор: bsa 13.1.2009, 13:27
проверяй свой файл dic.dic - у него конец строки виндовый ("\a\n"), а нужен nix-овый ('\n'). Воспользуйся командой dos2unix.

Автор: stat007 13.1.2009, 19:47
вообщето: using namespace std; пишетс перед функцией main()

Автор: pan2004 13.1.2009, 20:33
Цитата(stat007 @  13.1.2009,  19:47 Найти цитируемый пост)
вообщето: using namespace std; пишетс перед функцией main()

Да неужели? Кто это сказал?
ПС И вообще так советуют не делать. using std::cout; using std::cin;

Автор: Lazin 13.1.2009, 20:34
Цитата(stat007 @  13.1.2009,  19:47 Найти цитируемый пост)
вообщето: using namespace std; пишетс перед функцией main() 

правда что-ли?

Автор: russians 14.1.2009, 00:47
Цитата(DimanLin @ 13.1.2009,  13:19)
Цитата(pan2004 @ 12.1.2009,  19:44)
И что, не получается?

Вот что в поток валится:
mystrf
mystrfo
mystrgomez
mystrj
mystrkd
mystrla
mystrlako
mystrlaz
mystrlili
mystrlin
mystrlot
mystrluis
mystrm
mystrmn
mystrr
mystrroma
mystrs
mystrsa

Т.е сначало пишется слово из файла а потом коретка отходит назад и поверх этого слова пишется "mystr", далее переход на новую строку и всё сначало. Сам не пойму как так... Но он так делает.

А вот это надо было написать с самого начала...

Автор: ZeroPoint 20.1.2009, 16:18
Это происходит из-за разной интерпретации управляющего символа 
Код
'\n'
 в Unix и Dos(Win).
Тут немного кода, который должен понимать оба варианта. Писалось на скорую руку, так, что оптимизировать есть что smile
Код

#include <iostream>
#include <fstream>
#include <string>

int main()
{
    using namespace std;
    ifstream fin;
    fin.open("dic.dic");
    string temp;
    string mystr = "mystr";

//    while(getline(fin, temp))
//    {
//        cout << temp << mystr << endl;
//    }

    #define    _MyBuffSize 2048
    char cBuff[2048] = {0,};

    while( !fin.eof() )
    {
        char cCh;

        temp.clear();

        do{
            fin.get( cCh );

            if( cCh != '\x0D' && cCh != '\n' && (temp.size() < _MyBuffSize-1) )
            {
                if( cCh != '\x0A'  ) temp += cCh;
            }
            else break;

        }while( !fin.eof() );

        cout << temp << mystr << endl;
    }

    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)