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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Vl_zemtsov
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
#1

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

23.06.2012, 22:20. Просмотров 1110. Ответов 25
Метки нет (Все метки)

Хочу в созданный пустой файл записать 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2012, 22:20     Файл: Объясните, почему не работает?
Посмотрите здесь:

C++ Объясните,почему шаблоны написаны через struct?
Объясните почему так C++
Объясните, как работает программа C++
C++ Объясните как работает this -> и ->
C++ Объясните почему так
C++ Объясните, почему окно закрывается даже при cin.get(); хотя код правильный?
C++ Почему в динамическом массиве не работает то, что работает со статическим?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
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
852 / 750 / 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
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
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
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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     Файл: Объясните, почему не работает?
Еще ссылки по теме:

нарушение прав доступа при записи. объясните, почему? и как избежать? C++
Объясните пожалуйста, почему не запускается? C++
C++ Почему выводится в виде таблицы и почему не работает сортировка
C++ Объясните, почему программа циклится
Почему не работает cin.clear() и как работает sync()? C++

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

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

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