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

Файл: Объясните, почему не работает? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
23.06.2012, 22:20     Файл: Объясните, почему не работает? #1
Хочу в созданный пустой файл записать hello.
Написал простенькую программу.
Объясните, почему не работает?
Компиляция проходит успешно, но ничего в файле не меняется((

C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    fstream FILE;
    FILE.open("C:\file.txt",ios::out);
    FILE << "hello";
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
23.06.2012, 22:26     Файл: Объясните, почему не работает? #2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
#include <iostream>
using namespace std;
 
int main()
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::out);
    FILE << "hello";
    return 0;
}
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
23.06.2012, 22:44  [ТС]     Файл: Объясните, почему не работает? #3
Тогда вопрос дальше)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Kursach.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::out|ios::in);
    string s;
    FILE << "hello";
    FILE >> s;
    cout << s;
    return 0;
}


В строках

C++
1
2
    FILE >> s;
    cout << s;
Символы ">>" и "<<" подчеркнуты красным, почему??
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
23.06.2012, 23:44     Файл: Объясните, почему не работает? #4
Ты забыл подключить #include <string>
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
24.06.2012, 09:28  [ТС]     Файл: Объясните, почему не работает? #5
Цитата Сообщение от David Sylva Посмотреть сообщение
Ты забыл подключить #include <string>
Спасибо)

Но продолжим(((

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::out|ios::in);
    FILE << "hello";
    string s;
    FILE >> s;
    cout << s;
    return 0;
}
Почему-то после прибавления строчки
C++
1
FILE >> s;
в текстовый файл, после hello, записывается кучу букв "Н" (на 4 КБ букв). И выводится на экран (
C++
1
cout << s;
): "======..." (только без разрывов, 2 сплошные линии).
что не так?
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
24.06.2012, 09:49     Файл: Объясните, почему не работает? #6
Не знаю, насколько это кошерно, я бы попробовал открывать файл отдельно на чтение и запись.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::out);
    FILE << "hello";
    FILE.close();
    
    FILE.open("C:\\file.txt",ios::in);
    string s;
    FILE >> s;
    cout << s;
    FILE.close();
 
    return 0;
}
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
24.06.2012, 10:02  [ТС]     Файл: Объясните, почему не работает? #7
Цитата Сообщение от Schizorb Посмотреть сообщение
Не знаю, насколько это кошерно, я бы попробовал открывать файл отдельно на чтение и запись.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::out);
    FILE << "hello";
    FILE.close();
    
    FILE.open("C:\\file.txt",ios::in);
    string s;
    FILE >> s;
    cout << s;
    FILE.close();
 
    return 0;
}
Проблема с 2 линиями исчезла (нууу почему так?)
Но! в "s" ничего не записывается(((
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
24.06.2012, 10:15     Файл: Объясните, почему не работает? #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::out|ios::in);
    FILE << "hello";
    string s;
    FILE.clear();// чистим поток
    FILE.seekg(0, std::ios::beg);// перемотка в начало файла 
    FILE >> s;
    cout << s;
    return 0;
}
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
24.06.2012, 11:03  [ТС]     Файл: Объясните, почему не работает? #9
Спасибо) теперь дальше)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::in);
    string s;
    FILE >> s;
    for (int i; ;i++)
    {
        if (s[i]='\0')
            break;
        if ((s[i]==')')&&(s[i+1]!=';'))
            s.insert(i,"\n");
    }
    cout << s <<endl;
 
    return 0;
}
Почему-то когда я пытаюсь прокомпелировать такую программу, Visual Studio на меня не слабо сердится. (я именно возникает ошибка и Visual перезагружается с запросом отправить сист. ошибку разработчикам)
Однако никаких ошибок компелирования не выдает. Только в самой программе строка
C++
1
string s;
выделена красным кружочком слева (почему так не объясняется).
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
24.06.2012, 11:08     Файл: Объясните, почему не работает? #10
Красный кружочек? Это ты, наверное, брейкпоинт поставил.

Строка (std::string) по идее не имеет нуль символ на конце. Если нужно перебрать в цикле все элементы, то тогда уж как-нибудь так

C++
1
for (int i; i < s.size(); ++i)
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
24.06.2012, 11:42  [ТС]     Файл: Объясните, почему не работает? #11
Цитата Сообщение от Schizorb Посмотреть сообщение
Красный кружочек? Это ты, наверное, брейкпоинт поставил.

Строка (std::string) по идее не имеет нуль символ на конце. Если нужно перебрать в цикле все элементы, то тогда уж как-нибудь так

C++
1
for (int i; i < s.size(); ++i)
Что за брейпоинт? (простите за нубство, новичок)
мне i<s.size() не подходит. я же увеличиваю строку (s.insert). надо как-то именно конец строки обозначить)
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
24.06.2012, 12:01     Файл: Объясните, почему не работает? #12
Про точки останова

Ну так, size будет увеличиваться при вызове insert, должно работать.
C++
1
2
3
4
5
6
7
8
for (int i = 0; i < s.size(); ++i)
{
    if ((s[i]==')')&&(s[i+1]!=';'))
    {
        s.insert(i,"\n");
        ++i;
    }
}
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
24.06.2012, 12:32  [ТС]     Файл: Объясните, почему не работает? #13
Но все равно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::in);
    string s;
    FILE >> s;
    for (int i=0; i < s.size();i++)
    {
        if ((s[i]==')')&&(s[i+1]!=';'))
            s.insert(i,"\n");
    }
    cout << s <<endl;
 
    return 0;
}
В файле у меня записано: "brgbreugbibragbu)lagbuar".
Т.е. на выводе должно быть:
"brgbreugbibragbu)
lagbuar"
Однако ничего не выводиться((
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
24.06.2012, 12:50     Файл: Объясните, почему не работает? #14
insert вставит символ вместо ")" а скобку сдвинет дальше, поэтому по идее получится:

brgbreugbibragbu
)lagbuar

Надо делать вставку в позицию i+1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::in);
    string s;
    FILE >> s;
    for (int i=0; i < s.size(); ++i)
    {
        if ((s[i]==')')&&(s[i+1]!=';'))
        {
            s.insert(i + 1,"\n");
        }
    }
    cout << s <<endl;
 
    return 0;
}
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
25.06.2012, 17:58  [ТС]     Файл: Объясните, почему не работает? #15
Почему после компиляции программы:
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
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    fstream FILE;
    FILE.open("C:\\file.txt",ios::in);
    string s;
    FILE >> s;
    for (int i=0; i < s.size();i++)
    {
        if ((s[i]==')')&&(s[i+1]!=';'))
            s.insert(i+1,"\n");              
        if (s[i]=='>')
            s.insert(i+1,"\n");                
        if ((s[i]=='"')&&(s[i+1]!=';'))
            s.insert(i+1,"\n");                
 
    }
    
    
    
    cout << s <<endl;
    return 0;
}
выводится только "#include"
А если быть точнее (я проверил), почему в переменную "s" записываются данные из file.txt только до первого пробела?
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
25.06.2012, 18:12     Файл: Объясните, почему не работает? #16
чтобы данные записывались и с пробелами используй getline()
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
25.06.2012, 18:19  [ТС]     Файл: Объясните, почему не работает? #17
Можно поподробнее. Как использовать getline()??
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
25.06.2012, 18:25     Файл: Объясните, почему не работает? #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{ 
    ifstream infile; 
    infile.open("Text.txt"); 
 
    char buffer[500]; 
 
    while(!infile.eof()) 
    { 
        infile.getline(buffer, 500); 
        cout << buffer << endl; 
    } 
}
Вот как-то так
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
25.06.2012, 18:34  [ТС]     Файл: Объясните, почему не работает? #19
Цитата Сообщение от David Sylva Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{ 
    ifstream infile; 
    infile.open("Text.txt"); 
 
    char buffer[500]; 
 
    while(!infile.eof()) 
    { 
        infile.getline(buffer, 500); 
        cout << buffer << endl; 
    } 
}
Вот как-то так
Не работает. Ошибка в объявлении библиотек (выдается).
Можно какую-нибудь статью на эту тему??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2012, 18:39     Файл: Объясните, почему не работает?
Еще ссылки по теме:

Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает C++
Объясните пожалуйста, почему не запускается? C++
C++ Почему выводится в виде таблицы и почему не работает сортировка

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

Или воспользуйтесь поиском по форуму:
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
25.06.2012, 18:39     Файл: Объясните, почему не работает? #20
Это я тебе для примера сбросил код, вставь в свой код getline и считывай не в string, а в массив char.
Yandex
Объявления
25.06.2012, 18:39     Файл: Объясните, почему не работает?
Ответ Создать тему
Опции темы

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