0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
1

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

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

Author24 — интернет-сервис помощи студентам
Хочу в созданный пустой файл записать 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2012, 22:20
Ответы с готовыми решениями:

Объясните пожалуйста, почему не работает условие!
Начал изучать классы, хочу понять как работать с приватными переменнами! Есть такой вот метод:...

Объясните, пожалуйста, как работает фрагмент кода. Почему при i = 0 вводится лишь 2 строки?
Здравствуйте! Объясните, пожалуйста, как происходит ввод строк в этом фрагменте кода. string...

Файл: Считать из файла посимвольно текст и вывести его на экран. Объясните, как это работает.
Дали нам в вузе (1 курс) такой вот код, чтобы считать с файла посимвольно текст и вывести его //...

Объясните почему не работает?
FDM.TLinchData.Locate('Фамилия;Имя',VarArrayOf(),); //работает...

25
113 / 113 / 42
Регистрация: 02.05.2012
Сообщений: 524
Записей в блоге: 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;
}
1
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;
Символы ">>" и "<<" подчеркнуты красным, почему??
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
23.06.2012, 23:44 4
Ты забыл подключить #include <string>
1
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 сплошные линии).
что не так?
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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;
}
1
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" ничего не записывается(((
0
873 / 771 / 173
Регистрация: 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;
}
1
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;
выделена красным кружочком слева (почему так не объясняется).
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
24.06.2012, 11:08 10
Красный кружочек? Это ты, наверное, брейкпоинт поставил.

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

C++
1
for (int i; i < s.size(); ++i)
0
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). надо как-то именно конец строки обозначить)
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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;
    }
}
1
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"
Однако ничего не выводиться((
0
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 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;
}
1
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 только до первого пробела?
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
25.06.2012, 18:12 16
чтобы данные записывались и с пробелами используй getline()
0
0 / 0 / 0
Регистрация: 23.06.2012
Сообщений: 28
25.06.2012, 18:19  [ТС] 17
Можно поподробнее. Как использовать getline()??
0
1321 / 983 / 267
Регистрация: 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; 
    } 
}
Вот как-то так
0
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; 
    } 
}
Вот как-то так
Не работает. Ошибка в объявлении библиотек (выдается).
Можно какую-нибудь статью на эту тему??
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
25.06.2012, 18:39 20
Это я тебе для примера сбросил код, вставь в свой код getline и считывай не в string, а в массив char.
0
25.06.2012, 18:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2012, 18:39
Помогаю со студенческими работами здесь

Объясните пожалуйста, почему не работает.
:@echo off :2 set /p a = call :1 %a% goto 2 :1 echo value = %1 goto:eof

Объясните почему не работает res.json()
Здравствуйте, вот есть код app.post('/main.js', function(req, res){ var lightOfKitchen =...

Объясните почему justify-content не работает
Justify-content: center не выравнивает по центру &lt;!DOCTYPE html&gt; &lt;html lang=&quot;en&quot;&gt; &lt;head&gt; ...

Объясните, пожалуйста, почему не работает строка
Ничего не понимаю... Объясните, пожалуйста, почему не работает строка program 1; var a:...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru