Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
1

В начало и конец каждой строки текстового файла добавить разделитель «|»

12.06.2011, 23:43. Просмотров 3402. Ответов 44
Метки нет (Все метки)

Задание:
Даны три файла целых чисел одинакового размера. Создать текстовый файл, содержащий эти числа, расположенные в три столбца шириной по 20 символов (в каждом столбце содержатся числа из соответствующего исходного файла). В начало и конец каждой строки текстового файла добавить разделитель «|» (код 124). Числа выравниваются по левому краю столбца.
Вот то что я написала...у меня происходит зацикливание в while.Помогите пожалуйста разобраться.
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main(int argc, char* argv[])
{
 FILE *a,*b,*c,*f;
 char sym1,sym2,sym3;
 char razd='|';
 int i;
 a=fopen("first.txt","w");
 b=fopen("second.txt","w");
 c=fopen("third.txt","w");
 f=fopen("result.txt","w");
 if (a==0 || b==0 || c==0 || f==0)
 { perror("Cannot open files!!!");
   exit(0);
 }
 while (!feof(a) && !feof(b) && !feof(c))
 { fprintf(f,"%c",razd);
   for(i=0;i<20;i++)
   {fscanf(a,"%c",&sym1);
    fprintf(f,"%c",&sym1);
   }
   fprintf(f,"|");
   for(i=0;i<20;i++)
   {fscanf(b,"%c",&sym2);
    fprintf(f,"%c",sym2);
   }
   fprintf(f,"|");
   for(i=0;i<20;i++)
   {fscanf(c,"%c",&sym3);
    fprintf(f,"%c",sym3);
   }
   fprintf(f,"|");
   fprintf(f,"\n");
 }
 close(a);
 close(b);
 close(c);
 close(f);
 printf("Finish!!!");
 getch();
  return 0;
}
//---------------------------------------------------------------------------
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2011, 23:43
Ответы с готовыми решениями:

Добавить информацию в конец каждой строки текстового файла
Всем привет .Надо реализовать это задание на Си в крайнем случае на Си++. Дан текстовый файл и...

Поставить в начало каждой стоки текстового файла столько пробелов, сколько в ней встречается их
Задача: разработать программу, которая ставит в начало каждой стоки текстового файла столько...

Записать в начало каждой стоки текстового файла столько пробелов, сколько в ней встречается их
Здравствуйте, нужна помощь. Нужно разработать программу, которая ставит в начало каждой стоки...

Добавить в начало каждой стоки файла столько пробелов, сколько их в ней встречается
Здравствуйте, нужна помощь. Нужно разработать программу, которая ставит в начало каждой стоки...

Вставить в начало каждой строки файла ее номер и записать преобразованные строки в новый файл
Дан текстовый файл. Вставить в начало каждой строки ее номер и записать преобразованные строки в...

44
iama
1329 / 980 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
12.06.2011, 23:45 2
Файл, говорите, чисел, а читаете вы цифры
1
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
12.06.2011, 23:57  [ТС] 3
хм..спасибо щас исправлю проверю или работает.

Добавлено через 2 минуты
все равно не работает...я так понимаю нужно было исправить %c на %d ..так?..
у меня оно при запуске (работаю в C++ Builger 6) программы на выполнение появляется консольное окошко и все...больше ничего не происходит...начинаю проверять пошагово как изменяются переменые, там бесконечно прохожу циклы, хотя размер каждого файла 50б, т.е. в каждом 50 символов...
0
iama
1329 / 980 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
13.06.2011, 00:02 4
Дев4енка, почитайте про текстовые и типизированные файлы, все сразу станет поннятно.
0
13.06.2011, 00:02
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
13.06.2011, 00:09  [ТС] 5
я уже читала про все эти файлы тысячу раз....может я не все понимаю..но у меня уже осбо времени нету на это..мне завтра все сдать надо!...

Добавлено через 1 минуту
ой и я еще коду не тот троху выкинула..первые три файла нужно открывать через r. и там у меня ошибкаа..они не открываются на чтение почему то
0
asics
Freelance
Эксперт С++
2863 / 1798 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
13.06.2011, 00:12 6
Дев4енка, Файлы в папке з .exe ?
0
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
13.06.2011, 01:37  [ТС] 7
да конечно.у меня уже все открывается. но почему то при считывании с файла цифра в переменную не заносится...там остается тот "мусор" который появляется при ее описании.

Добавлено через 1 час 23 минуты
ответьте пожалуйста мне
0
accept
4835 / 3257 / 464
Регистрация: 10.12.2008
Сообщений: 10,569
13.06.2011, 06:16 8
надо открыть файлы на чтение и один на запись
потом одновременно считываеть по одному числу с каждого файла
и записывать три числа в четвёртый файл одним вызовом fprintf()
0
Airhand
503 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
13.06.2011, 16:06 9
Конечно будет не выходить из цыкла. Ведь условием там "если не конец файла а И если не конец файла b ... " А у них что одинаковый размер, что они одновременно должны закончится ?
И фалы надо открывать как r, а не как w. Только четвёртый файл надо открывать как w. И читается посимвольно (%с), а как там записаны числа ?
Я уже давно не пользуюсь FILE, а только std::fstream, так что могу чего-то и не помнить.
0
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
13.06.2011, 16:40  [ТС] 10
ну да.одинакового.в задании ж написано..смотри вверху.по поводу w я написала что не тот код скинула..а по поводу %с я уже пробовала менять.не помогает.не считывает вообще символы с файла.попробовала сразу в программе записывать туда числа.все равно одно и тоже.вот конечный код, но считывание не работает.
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main(int argc, char* argv[])
{
 FILE *a,*b,*c,*f;
 char sym1,sym2,sym3;
 char razd='|';
 int i,j,el1=3,el2=7,el3=5;
  a=fopen("first.txt","r");
 b=fopen("second.txt","r");
 c=fopen("third.txt","r");
 f=fopen("result.txt","w");
 if (a==0 || b==0 || c==0 || f==0)
 { perror("Cannot open files!!!");
   exit(0);
 }
 for(j=0;j<50;j++)
 {fprintf(a,"%d",el1);
  fprintf(b,"%d",el2);
  fprintf(c,"%d",el3);
 }
 
 while ((!feof(a)) && (!feof(b)) && (!feof(c)))
 { fprintf(f,"%c",razd);
   for(i=0;i<20;i++)
   {fscanf(a,"%d",&sym1);
    fprintf(f,"%d",sym1);
   }
   fprintf(f,"%c",razd);
   for(i=0;i<20;i++)
   {fscanf(b,"%d",&sym2);
    fprintf(f,"%d",&sym2);
    printf(" %d",&sym2);
   }
   fprintf(f,"%c",razd);
   for(i=0;i<20;i++)
   {fscanf(c,"%d",&sym3);
    fprintf(f,"%d",sym3);
   }
   fprintf(f,"|");
   fprintf(f,"\n");
 }
 close(a);
 close(b);
 close(c);
 close(f);
 printf("Finish!!!");
 getch();
  return 0;
}
//---------------------------------------------------------------------------
0
Airhand
503 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
13.06.2011, 17:01 11
Короче, цыкл дожен быть таким:
C
1
2
3
4
5
6
bool b = false;
while (!b)
{
b = feof(a) || feof(b) || feof(c);
...
}
Я подразумевал, что числа записаны текстово или бинарно ? Если бинарно, то например 1 имеет код 71 (если точно помню), и т. д. То есть будет несоответствие записанных чисел и прочитанных.
Кроме того, в цыклах for читаются по 21 сиволу, а что если на 5 конец файла ? Оно не может завершить цыкл, поэтому и виснет.
1
iama
1329 / 980 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
13.06.2011, 17:05 12
Да не в цикле дело, выложите сами файлы, которые нужно считать.
0
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
13.06.2011, 18:00  [ТС] 13
народ помогите...пожалуйста..
0
iama
1329 / 980 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
13.06.2011, 18:20 14
Цитата Сообщение от iama Посмотреть сообщение
выложите сами файлы
тупая, или шо?
0
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
13.06.2011, 20:18  [ТС] 15
сори не заметила вторую страницу..сутки не спала ...
[404]
вот ссылка на файлы...извините еще раз
0
Airhand
503 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
13.06.2011, 21:36 16
Судя по всему это текстовые файлы. Значит их надо открывать минимум как текст, а по умолчанию оно открывает (если не ошибаюсь) как бинарные, т.е. ... = fopen(..., "rt").
0
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
13.06.2011, 21:43  [ТС] 17
хм..ты написал как раз таки тектовый...r значит на чтение а t значит что файл текстовый....это нам в теории так давали
0
iama
1329 / 980 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
13.06.2011, 21:51 18
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Дев4енка, правильно вы все читали в первый раз, вы неправильно нам задание описали
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
 
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main(int argc, char* argv[])
{
 FILE *a,*b,*c,*f;
 char sym1,sym2,sym3;
 char razd='|';
 int i;
 a=fopen("first.txt","w");
 b=fopen("second.txt","w");
 c=fopen("third.txt","w");
 f=fopen("result.txt","w");
 if (a==0 || b==0 || c==0 || f==0)
 { perror("Cannot open files!!!");
   exit(0);
 }
 while (!feof(a) || !feof(b) || !feof(c))
 { fprintf(f,"%c",razd);
   for(i=0;i<20;i++)
   {fscanf(a,"%c",&sym1);
    fprintf(f,"%c",sym1);
   }
   fprintf(f,"|");
   for(i=0;i<20;i++)
   {fscanf(b,"%c",&sym2);
    fprintf(f,"%c",sym2);
   }
   fprintf(f,"|");
   for(i=0;i<20;i++)
   {fscanf(c,"%c",&sym3);
    fprintf(f,"%c",sym3);
   }
   fprintf(f,"|");
   fprintf(f,"\n");
 }
 close(a);
 close(b);
 close(c);
 close(f);
 printf("Finish!!!");
 getch();
  return 0;
}
//---------------------------------------------------------------------------
На первый взгляд, должно работать
0
Airhand
503 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
13.06.2011, 21:52 19
Правильно, надо читать как текстовый, а читается как бинарный.
0
Дев4енка
0 / 0 / 1
Регистрация: 26.03.2011
Сообщений: 85
13.06.2011, 22:29  [ТС] 20
Цитата Сообщение от iama Посмотреть сообщение
На первый взгляд, должно работать
здесь есть ошибки..я не так открывала файлы a,b,c. их надо открывать w+t, т.е. на чтение и запись
но у меня тогда не открывает вообще...
0
13.06.2011, 22:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2011, 22:29

Добавить букву W в конец каждой строки текстового файла
Даны текстовый файл f. Добавить букву W на конец каждой строки текстового файла

Добавить в конец каждой строки текстового файла изображение соответствующего числа из файла целых чисел
Дан текстовый файл и файл целых чисел. Добавить в конец каждой строки текстового файла изображение...

Добавить "0" в начало каждой строки текстового файла
Нужна помощь!В начало каждой строки в текстовом файле в цикле необходимо поставить 0. В файле...


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

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

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