Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 12:55   #1
F1nt
Пользователь
 
Регистрация: 11.09.2011
Сообщений: 41
По умолчанию Работа с файлами

Даны два числовых файла одинаковой длины, значения в которых упорядочены по возрастанию. Создать третий файл из чисел первых двух файлов так, чтобы упорядоченность элементов не нарушалась. Массивы и сортировку не использовать.
Код:
#include <fstream.h>
#include <conio.h>
void main()
{
 clrscr();
 int x,i;
 ifstream F("D:\\BORLANDC\\BIN\\fl1.txt");
 ifstream Fa("D:\\BORLANDC\\BIN\\fl2.txt");
 fstream Fal("D:\\BORLANDC\\BIN\\FL3.txt",ios::out);
 cout<<'\t'<<'\t'<<'\t'<<"File 1"<<endl<<endl;
 for(i=0;i<5;i++)
    {
     F>>x;Fal<<x;
     cout<<x<<'\t';
    }
 cout<<endl<<endl;
 cout<<'\t'<<'\t'<<'\t'<<"File 1"<<endl<<endl;
 for(i=0;i<5;i++)
    {
     Fa>>x;Fal<<x;
     cout<<x<<'\t';
    }
 cout<<endl<<endl;
 cout<<'\t'<<'\t'<<'\t'<<"File 3"<<endl<<endl;
 for(i=0;i<10;i++)
    {
     Fal>>x;
     cout<<x<<'\t';
    }
 cout<<endl<<endl;
 F.close();  Fa.close(); Fal.close();
 getch();
}
Задачка-то простенькая, но не пойму почему мне не выводит 3-ий файл как нужно. Все значения переписались в сам файл правильно, а выводит на экран 10 девяток. В чём моя ошибка?
F1nt вне форума Ответить с цитированием
Старый 06.02.2012, 21:04   #2
skyll
Пользователь
 
Регистрация: 05.02.2012
Сообщений: 28
По умолчанию

Напиши пример. Вот к примеру в первом файле:
1 4 6 7 8 9

Во втором:
1 2 3 5 6 7

Что должно получиться в 3?
skyll вне форума Ответить с цитированием
Старый 06.02.2012, 21:16   #3
F1nt
Пользователь
 
Регистрация: 11.09.2011
Сообщений: 41
По умолчанию

Первый файл уже создан и там допустим там 1 4 6 7 8 9, второй тоже создан и там 1 2 3 5 6 7. А в третьем должно быть 1 4 6 7 8 9 1 2 3 5 6 7, т.е. значение этих двух. Он переписывает так как надо я вижу в файле, а вот выводить на экран не хочет, выводит по циклу только 9999999999,т.е. десять 9.
F1nt вне форума Ответить с цитированием
Старый 06.02.2012, 21:56   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Я ничего принципиально не менял в коде. Я лишь изменил его структуру, что бы все лишнее убрать с глаз долой, и было удобнее проиллюстрировать момент.

Код:
#include <fstream>

inline void Msg(const char* text) { std::cout<<'\t'<<'\t'<<text<<"\n\n";}
inline void WriteEx(std::ifstream& src, std::fstream& dst) { int x; src>>x; dst<<x<<' ';  std::cout<<x<<'\t';}

void main()
{
    //Примечание: для простоты момента изменил пути к файлам.
    std::ifstream F("test1.txt"); std::ifstream Fa("test2.txt"); std::fstream Fal("test3.txt",std::ios::out);
    
    //вот здесь у тебя Fal открыт в режиме для записи
    //ты записываешь в файл данные

    Msg("File 1"); for(size_t i=0;i<5;i++) { WriteEx(F,Fal);  }; Msg(""); //запись из 1 файла
    Msg("File 2"); for(size_t i=0;i<5;i++) { WriteEx(Fa,Fal); }; Msg(""); //запись из 2 файла
    
    //А вот здесь ты уже хочешь читать из него.
    //Но он у тебя открыт в режиме только для записи.

    Msg("File 3");  Fal.close();           //Закрываем файл,
    Fal.open("test3.txt",std::ios::in);  //и заново его открываем, но уже для чтения
    
    //дальше, как обычно, читаем-мс
    int x;  for(size_t i=0;i<10;i++) {  Fal>>x;  std::cout<<x<<' ';  }; Msg("");
    
    F.close();  Fa.close(); Fal.close();
}
см комментарии в коде.

Последний раз редактировалось _Bers; 06.02.2012 в 22:09.
_Bers вне форума Ответить с цитированием
Старый 06.02.2012, 22:11   #5
skyll
Пользователь
 
Регистрация: 05.02.2012
Сообщений: 28
По умолчанию

Держи:

Код:
#include <iostream>
#include <fstream>

using namespace std;

int main() {
	ifstream file ("C:/Text.txt");
	ifstream file1 ("C:/Text1.txt");
	ofstream file2 ("C:/Text2.txt");
	char i;
	while (!file.eof()){
		file >> i;
		cout << i << " ";
		file2 << i << " ";
	}
	cout << "\n\n";
	while (!file1.eof()){
		file1 >> i;
		cout << i << " ";
		file2 << i << " ";
	}
	cout << "\n\n";
	file.close();
	file1.close();
	file2.close();
	ifstream endFile ("C:/Text2.txt");
	while (true) {
		endFile >> i;
		if (!endFile.eof())
			cout << i << " ";
		else break;
	}
	endFile.close();
}
skyll вне форума Ответить с цитированием
Старый 06.02.2012, 22:56   #6
F1nt
Пользователь
 
Регистрация: 11.09.2011
Сообщений: 41
По умолчанию

Спасибо! Я теперь догнал! А вариантов несколько я вижу как сделать теперь))
1.Вариант:
Код:
#include <fstream.h>
#include <conio.h>
void main()
{
 clrscr();
 int x,i;
 ifstream F("D:\\BORLANDC\\BIN\\fl1.txt");
 ifstream Fa("D:\\BORLANDC\\BIN\\fl2.txt");
 ofstream Fal("D:\\BORLANDC\\BIN\\FL3.txt");
 cout<<'\t'<<'\t'<<'\t'<<"File 1"<<endl<<endl;
 for(i=0;i<5;i++)
    {
     F>>x;
     Fal<<x<<" ";
     cout<<x<<'\t';
    }
 F.close();
 cout<<endl<<endl;
 cout<<'\t'<<'\t'<<'\t'<<"File 1"<<endl<<endl;
 for(i=0;i<5;i++)
    {
     Fa>>x;
     Fal<<x<<" ";
     cout<<x<<'\t';
    }
 Fa.close();
 Fal.close();
 cout<<endl<<endl;
 cout<<'\t'<<'\t'<<'\t'<<"File 3"<<endl<<endl;
 ifstream endF("D:\\BORLANDC\\BIN\\FL3.txt");
 for(i=0;i<10;i++)
    {
     endF>>x;
     cout<<x<<" ";
    }
 cout<<endl<<endl;
 endF.close();
 getch();
}
2.Вариант:
Код:
#include <fstream.h>
#include <conio.h>
#include <iostream.h>
void main()
{
 clrscr();
 char x;
 ifstream F("D:\\BORLANDC\\BIN\\fl1.txt");
 ifstream Fa("D:\\BORLANDC\\BIN\\fl2.txt");
 ofstream Fal("D:\\BORLANDC\\BIN\\FL3.txt");
 cout<<'\t'<<'\t'<<'\t'<<"File 1"<<endl<<endl;
 while(!F.eof())
      {
       F>>x;
       cout<<x<<" ";
       Fal<<x<<" ";
      }
 cout<<endl<<endl;
 cout<<'\t'<<'\t'<<'\t'<<"File 1"<<endl<<endl;
  while(!Fa.eof())
      {
       Fa>>x;
       cout<<x<<" ";
       Fal<<x<<" ";
      }
 cout<<endl<<endl;
 F.close();
 Fa.close();
 Fal.close();
 ifstream endF("D:\\BORLANDC\\BIN\\FL3.txt");

 cout<<'\t'<<'\t'<<'\t'<<"File 3"<<endl<<endl;
 while("true")
      {
       endF>>x;
       if(!endF.eof())
	 cout<<x<<" ";
	 else break;
      }
 endF.close();
 cout<<endl<<endl;
 getch();
}

Последний раз редактировалось F1nt; 06.02.2012 в 23:04.
F1nt вне форума Ответить с цитированием
Старый 10.02.2012, 12:29   #7
F1nt
Пользователь
 
Регистрация: 11.09.2011
Сообщений: 41
По умолчанию

Как вывести слова с файла по-строчно, т.е пробелы не считаются концом строки.
Ну допустим в файле слова
вапвап
пвапва вапвап
вапвап вапва пвапвап
F1nt вне форума Ответить с цитированием
Старый 12.02.2012, 13:22   #8
F1nt
Пользователь
 
Регистрация: 11.09.2011
Сообщений: 41
По умолчанию

Я сделал, всё было дело в моей невнимательности. Вот допустим программа
Код:
#include <fstream.h>
#include <conio.h>
#define maxlen 80
void main()
{
 clrscr();
 char s[50];
 ifstream f("txt.txt");
 while(!f.eof())
      {
       f.getline(s,maxlen);
       cout<<s<<endl;
      }
 f.close();
 getch();
}
Всё работает. Вот в задании написано "Рядом с каждой строкой вывести сообщение о том, является ли она правильной записью шестнадцатеричного числа или нет". Вот этого я уже не пойму что это значит. Подскажите.
F1nt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами Vitalya_1993 Помощь студентам 8 11.12.2011 14:46
работа с файлами nastya2112 Паскаль, Turbo Pascal, PascalABC.NET 0 01.06.2011 20:16
Работа с файлами с++ ser2511 Общие вопросы C/C++ 0 31.05.2011 22:00
Работа с файлами на Си genia Общие вопросы C/C++ 4 19.02.2011 16:29
Работа с файлами Pr1meEX PHP 9 21.06.2009 03:15