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

Функции ifstream , ofstream. Исправить - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.82
Daedro
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 9
25.06.2012, 03:12     Функции ifstream , ofstream. Исправить #1
Помогите исправить код пжлст, не работает прога(
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
int i;
char *a=new char[255],*b=new char[255],c;
ifstream f1("f.txt" , ios::in);
ofstream f2("g.txt" , ios::out);
ofstream f3("f.txt" , ios::out|ios::trunc);
while (!f1.eof())
{
f1.getline(a, strlen(a));
cout<<a;
}
cout<<"Введенная строка:"<<endl;
for(i=0;i<strlen(a);i++)
{
cout<<a[i];
}
cout<<endl<<endl<<"Хотите ввести другую строку? (введите 'y', если да) ";
cin>>c;
if (c=='y')
{
cout<<"Введите строку:"<<endl<<endl;
cin.ignore(256,'\c');
cin.getline( a, strlen(a));
OemToChar(a,a);
f3<<a;
}
cout<<"Нажмите любую хнопку=)"<<endl;
getch();
cout<<"Обратная строка:"<<endl;
for (int j = 0 , i = strlen(a)-1 ; j < strlen(a) , i >= 0 ; j++ , i-- )
{
    b[j]=a[i];
    cout<<a[i];
}
f2<<b;
cout<<endl;
f1.close();
f2.close();
f3.close();
cout<<endl<<"Данные успешно сохранены";
getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2012, 03:12     Функции ifstream , ofstream. Исправить
Посмотрите здесь:

C++ ifstream/ofstream/fstream
сокращенная запись ifstream и ofstream C++
C++ C++ файлы ifstream/ofstream
class/string/ifstream/ofstream C++
ifstream ofstream C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2012, 05:29     Функции ifstream , ofstream. Исправить #2
Так работает, но нужно, чтобы пред первым запуском существовал файл f.txt со строкой.
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
int i;
char *a = new char[255];
char *b = new char[255];
char c;
 
ifstream f1("f.txt" , ios::in); 
ofstream f2("g.txt" , ios::out); 
 
while (!f1.eof())
{
    f1.getline(a, strlen(a));
    cout << a;
}
cout << "\nВведенная строка:" << endl;
for(i = 0; i < strlen(a); i++)
{
    cout<<a[i];
}
cout << endl << endl << "Хотите ввести другую строку? (введите 'y', если да) ";
cin >> c;
cin.get();
if (c == 'y')
{
    ofstream f3("f.txt" , ios::out|ios::trunc);
    cout << "Введите строку:" << endl << endl;
    //cin.ignore(256,'\c'); // непонятно зачем.
    cin.getline(a, strlen(a));
    OemToChar(a, a);
    f3 << a;
    f3.close();
}
cout << "Нажмите любую хнопку=)" << endl;
getch();
cout << "Обратная строка:" << endl;
int j = 0; // чтобы добавить после цикла символ окончания строки.
for (i = strlen(a)-1; j < strlen(a), i >= 0; j++, i--) // в условии продолжения цикла непонятная запятая, но и так работает.
{
    b[j] = a[i];
    cout << a[i];
}
b[j] = '\0'; // добавляем окончание строки.
f2 << b;
cout << endl;
f1.close();
f2.close();
cout << endl << "Данные успешно сохранены";
getch();
return 0;
}
Daedro
0 / 0 / 0
Регистрация: 18.06.2012
Сообщений: 9
25.06.2012, 07:58  [ТС]     Функции ifstream , ofstream. Исправить #3
существует

Добавлено через 34 минуты
+ после запуска файл f.txt становится пустой, а файл j.txt заполняется так
"НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННээээ««««««««юоюою"
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
25.06.2012, 09:16     Функции ifstream , ofstream. Исправить #4
Хм, что-то я в упор не вижу j.txt файл..

Подобная строчка возникает обычно из-за того, что у тебя либо не инициализирована строка, которую ты выводишь, либо нет нуль-символа в конце, но, судя по тому, что у тебя вся строчка из HHHHHH и вначале нет первоначальной строки, то то, что ты выводишь, не инициализирована.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2012, 17:08     Функции ifstream , ofstream. Исправить #5
Цитата Сообщение от Daedro Посмотреть сообщение
существует

Добавлено через 34 минуты
+ после запуска файл f.txt становится пустой, а файл j.txt заполняется так
"НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННээээ««««««««юоюою"
Чей код пробуешь? Мой или свой? При каком варанте выбора: "Хотите ввести другую строку? (введите 'y', если да) "? Какой длины первая строка в файле f.txt?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2012, 17:17     Функции ifstream , ofstream. Исправить #6
Цитата Сообщение от Daedro Посмотреть сообщение
f1.getline(a, strlen(a));
Ребятки, что по вашему делает данная функция?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2012, 17:29     Функции ifstream , ofstream. Исправить #7
В моём коде нужно исправить 38 строку. Записать так: cin.getline(a, 255); , а то другая строка обрезается по длине первой.

Добавлено через 3 минуты
Цитата Сообщение от kazak Посмотреть сообщение
Ребятки, что по вашему делает данная функция?
Тем не менее, работает. Хотя правильно так: f1.getline(a, 255);
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2012, 17:31     Функции ifstream , ofstream. Исправить #8
Работает по счастливому стечению обстоятельств.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2012, 17:38     Функции ifstream , ofstream. Исправить #9
Кто-нибудь может объяснить смысл запятой, в условии продолжения цикла, в строке: 47 for (i = strlen(a)-1; j < strlen(a), i >= 0; j++, i--)

Добавлено через 1 минуту
Цитата Сообщение от kazak Посмотреть сообщение
Работает по счастливому стечению обстоятельств.
Не спорю. Исправлял только то, что не давало работать.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2012, 17:40     Функции ifstream , ofstream. Исправить #10
Цитата Сообщение от alsav22 Посмотреть сообщение
Кто-нибудь может объяснить смысл запятой, в условии продолжения цикла, в строке
В условии не должно быть запятых. Если условий несколько, они должны объединяться логическими связками.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2012, 17:45     Функции ifstream , ofstream. Исправить #11
Цитата Сообщение от kazak Посмотреть сообщение
В условии не должно быть запятых. Если условий несколько, они должны объединяться логическими связками.
Почему компилятор не ругается? Почему работает? Как-то, компилятор эту запятую, всё-таки, понимает.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.06.2012, 17:56     Функции ifstream , ofstream. Исправить #12
Он не понимает, а просто берет результат последнего выражения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2012, 18:02     Функции ifstream , ofstream. Исправить
Еще ссылки по теме:

Неправильно выполнение ifstream, ofstream C++
Перегрузка ifstream и ofstream? C++
Работа с потоками ofstream/ifstream C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2012, 18:02     Функции ifstream , ofstream. Исправить #13
Цитата Сообщение от kazak Посмотреть сообщение
Он не понимает, а просто берет результат последнего выражения.
Да. Сейчас почитал об операторе запятая.
Тогда строку 47 нужно записать так: for (i = strlen(a) - 1; i >= 0; j++, i--), тем более, что длина строки в a и так учитывается при инициализации i.
Yandex
Объявления
25.06.2012, 18:02     Функции ifstream , ofstream. Исправить
Ответ Создать тему
Опции темы

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