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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2010, 16:03   #1
girkoff
Пользователь
 
Регистрация: 07.11.2008
Сообщений: 71
По умолчанию и справить ошибку в программе

я работаю в turbo c++ мне нужно из 2 текстовых файлов сделать один причём чередуя строки один из первого потом из 2, потом вторая строка из 1 файла, потом 2 строка из 2 файла и т.д. По мере слияния нужно менять символы пробела на символы табуляции.
Вот мой код:
Код:
#include<conio.h>
#include<ctype.h>
#include<io.h>
#include<stdlib.h>
#include<string.h>
const dlin1=100, dlin2=100, dlin3=100;
char string1[dlin1],string2[dlin2],string3[dlin3];
int razm;
int i;
class people {
        public:
        FILE *file1,*file2,*out;
~people()
{
fclose(file1);
fclose(file2);
fclose(out);
}
void zamena(char string3[dlin3])
{
for (i=0;i<strlen(string3);i++) {
if(string3[i]==' ')
string3[i]='\t';
}
printf("%s",string3);
}
void writefile2(FILE *file1,char string2[dlin2])
{
fgets(string2,dlin2,file1);
if (string2[dlin2+1]!='\n')
{
string2[dlin2]='\n';
string2[dlin2]='\0';
}
razm=strlen(string2);
strcpy(string3,string2);
}
void vivod(char string3[dlin3],FILE *out)
{
fputs(string3,out);
}
        private:
};

void main()
{
clrscr();
people a;

char f1[100],f2[100],f3[100],s[100];
printf("VVedite put' k file1: \n");
scanf("%s",f1);
printf("VVedite put' k file2: \n");
scanf("%s",f2);
printf("VVedite put' k out:  \n");
scanf("%s",f3);
if ((a.file1=fopen(f1,"r"))==0)
{
printf("oshibka otkritia file1!!!");
return;

}
if ((a.file2=fopen(f2,"r"))==0)
{
printf("osibka otkritia file2!!!");
return;
}
if ((a.out=fopen(f3,"a+r"))==0)
{
printf("oshibka otkritia out!!!");
return;
}
int i;
while (!feof(a.file1) || !feof(a.file2))
{
a.writefile2(a.file1,string1);
a.zamena(string3);
a.vivod(a.out,string3);
a.writefile2(a.file2,string2);
a.zamena(string3);
a.vivod(a.out,string3);
};
}
writefile2 - чередует строки
zamena - заменяет пробелы на табы
vivod - отправляет в файл(вот в этом у меня выдаёт ошибку!!!)
Помогите исправить, заранее спосибо)
Если долго мучаться, что нибудь получится!!!
girkoff вне форума Ответить с цитированием
Старый 12.04.2010, 16:50   #2
evgn
Разрабатываюсь....
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 68
По умолчанию

Код:
void vivod(char * string3, FILE *out)
evgn вне форума Ответить с цитированием
Старый 12.04.2010, 17:01   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Я бы использовал такой алгоритм:
1) открыть 2 файла на чтение и один создать
2) считать данные из 1 файла и записать в str1
3) считать данные из 2 файла и записать в str2
4) сформировать строку str, которая будет удовлетворять нужным условиям
5) записать str в 3 файл

а вот его реализация:
Код:
#include <iostream>
using namespace std;

int main(void)
{
   FILE *f1 = fopen("one.txt", "r");
   FILE *f2 = fopen("two.txt", "r");
   FILE *mergeFile = fopen("merge.txt", "w+");
   
   string s1, s2, readyStr;
   char buf[256];   
   while( !feof(f1) && !feof(f2) ) {
       fgets(buf, 256, f1); readyStr += buf;	   
       fgets(buf, 256, f2); readyStr += buf;	  	   
   }
   fclose(f1); fclose(f2);
   for(int i=0; i<(int) readyStr.size(); i++)
		if( readyStr[i] == ' ' ) readyStr[i] = '\t';
   fprintf( mergeFile, "%s", readyStr.c_str() );  
   fclose(mergeFile);   
   return 0;
}
согласись, намного проще)

Последний раз редактировалось NiCola999; 12.04.2010 в 17:38.
NiCola999 вне форума Ответить с цитированием
Старый 12.04.2010, 21:56   #4
girkoff
Пользователь
 
Регистрация: 07.11.2008
Сообщений: 71
По умолчанию

NiCola999 спосибо, но мне препод сказал это доделать, тогда возьмёт)
вывод я немножко переделал, стало 2 ошибки expression syntax
Код:
while (!feof(a.file1) || !feof(a.file2))
{
a.writefile2(a.file1,string1);
a.zamena(string3);
a.vivod(a.out,char *string3);
a.writefile2(a.file2,string2);
a.zamena(string3);
a.vivod(a.out,char *string3);
};
Если долго мучаться, что нибудь получится!!!
girkoff вне форума Ответить с цитированием
Старый 13.04.2010, 09:55   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
a.vivod(a.out,char *string3);
Вот что это такое? Или вы хотите привести массив к типу указателя? Тогда надо
Код:
a.vivod(a.out,(char *)string3);
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 13.04.2010, 12:38   #6
girkoff
Пользователь
 
Регистрация: 07.11.2008
Сообщений: 71
По умолчанию

Мне нужно чтобы vivod отправлял данные в файл, а он ругается на мои формальные параметры, вот я и спрашиваю в чём моя ошибка)
Если долго мучаться, что нибудь получится!!!
girkoff вне форума Ответить с цитированием
Старый 13.04.2010, 13:12   #7
evgn
Разрабатываюсь....
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 68
По умолчанию

Меняем
Код:
void writefile2(FILE *file1,char string2[dlin2])
void zamena(char string3[dlin3])
void vivod(char string3[dlin3],FILE *out)
на
Код:
void writefile2(FILE *file1,char *string2)
void zamena(char *string3)
void vivod(char *string3, FILE *out)
и тут тоже...
Код:
while (!feof(a.file1) || !feof(a.file2))
{
a.writefile2(a.file1,string1);
a.zamena(string3);
a.vivod(a.out,string3);
a.writefile2(a.file2,string2);
a.zamena(string3);
a.vivod(a.out,string3);
};
И еще...
Код:
if (string2[dlin2+1]!='\n')
{
string2[dlin2]='\n';
string2[dlin2]='\0';
}
В массиве string2 не может быть элемента dlin2 и dlin2+1... и для чего в один элемент писать разные значения?
Строка должна заканчиваться не переводом строки, а \0.

Последний раз редактировалось evgn; 13.04.2010 в 13:17.
evgn вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно найти ошибку в программе (С++) STIFFmaster_LP Помощь студентам 13 24.01.2010 00:44
Привествую всех)))помогите справить ошибку MrMorozko Помощь студентам 1 16.12.2009 16:39
Ищу ошибку в программе. Tonik_A Помощь студентам 1 08.12.2009 23:38
Помогите найти ошибку в программе k1r1ch Общие вопросы Delphi 7 04.10.2009 09:36
НАЙДИТЕ ОШИБКУ В ПРОГРАММЕ svetah Помощь студентам 8 03.12.2008 15:19