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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Hana
Сообщений: n/a
#1

fputc не работает, укажите где в програмке ошибка - C++

06.08.2011, 02:59. Просмотров 1055. Ответов 3
Метки нет (Все метки)

В С создается файл и выполняется над ним работа. Создается файл, вводится в него текст, где слова разделены ' ' (пробелом), линии ':' ( двоеточием). В конце файла устанавливается '!'( воскл.знак). Нужно создать функцию в которую передается файл и символ, эта функция должна изменять первый символ каждой линии на символ который передали как параметр. В конце вывести содержимое файла в главной функции.
Програмку написала, все работает кроме fputc в функции которая должна изменять первый символ каждой строки на новый, переданный.она вставляет только первый... в следующие строки не вставляет.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void change(char *filename, char symbol)
{
FILE *file;
if( (file=fopen(filename,'r+')) == NULL )
{ cout<< 'Cant open file';
getch();
exit (1);
}
 
char ch;
fputc(symbol,file);
fseek (file, 0, SEEK_CUR);
 
do
{ ch=fgetc(file);
if(ch==':')
{fputc(symbol,file);
fseek (file, 0, SEEK_CUR);
}
} while(ch!=EOF);
 
fclose(file);
}
 
void main()
{ char buffer[100],filename[300],ch;
cout << 'Enter the name of the file.If the file by that name already exists, itwill be overwritten.';
cin>>filename;
FILE *file;
 
clrscr();
if( (file=fopen(filename,'w+')) == NULL )
{
cout << 'The file  ''<<filename<<' 'was not opened. Press any key to continue.';
getch();//
exit(1);//
}
 
cout << 'Type a text or press  'Ctrl+Z ' to continue...';
do
{ cin>>buffer;
fputs(buffer, file);
 
if(cin.get()=='')
fputc (':', file); // line
 
else fputc (' ', file);
 
} while(cin.good());
 
fputc ('!', file);
 
fputc (EOF, file);
fclose(file);
 
change(filename,'@');
 
if( (file=fopen(filename,'r')) == NULL )
{
cout << 'Error while opening  ''<<filename<<' ' for reading. Press Enter to continue.';
exit(1);
}
else
{
do
{ fgets(buffer,100,file);
cout << buffer;
}while(!feof(file));
 
cout << 'Press Enter to Escape.';
getch();
fclose(file);
}
exit(1);
 
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2011, 02:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос fputc не работает, укажите где в програмке ошибка (C++):

Укажите где ошибка (ошибка во время выполнения программы) - C++
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...

Ошибка в програмке - C++
Доброго времени суток уважаемые форумчане. Помогите, не могу найти причину неправильной работы програмки: #include&lt;iostream.h&gt; ...

Ошибка: 'fputc' : cannot convert parameter 1 from 'char *' to 'int' - C++
Помогите разобраться Я начинающий программист, не судите строго:- int _tmain() { char *a; a=&quot;TTTT+&quot;; FILE *fp; ...

не работает где ошибка? - C++
#include&lt;iostream&gt; using namespace std; int main() { long i,s; for (int s=0; i = 0; i = 1.5; s=2.5; ++i; s=s+i) { ...

Простая программа не работает. где ошибка? - C++
простая программа не работает. где ошибка? подскажите пожалуйста. туплю( #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include...

Как работает strcpy(), где ошибка - C++
Всем привет) Писал задачу, которая из 10 строк выводит самое короткое и первое в алфавитном порядке. Не понимаю почему не работает...

3
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
06.08.2011, 12:18 #2
Я бы переделал основной цикл функции change так
C++
1
2
3
4
5
6
7
8
while((ch=fgetc(file))!=EOF)
{
   if(ch==':')
   {
      fseek(file,-1,SEEK_CUR);
      fputc(symbol, file);
   }
}
А вообще, работать с файлами по-байтово очень не эффективно. Лучше переписывать в память блоками (например самый маленький с помощью fgets - читает одну строку) делать замены в памяти, а потом писать во временный файл. После окончиния работы стирать оригинальный файл и переименновать временный в постоянный.
0
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
06.08.2011, 12:33 #3
Да, и строки перед циклом

C++
1
2
fputc(symbol,file);
fseek (file, 0, SEEK_CUR);
надо удалить нафиг (именно по этому замена происходит только в первой строке.

И кроме того, весь этот код предполагает, что знак для замены не встретится в строке никгде кроме первого знака, иначе будут заменены все знаки.

Если же возможно появление знака для замены внутри строки, то надо читать файл по-строково, запоминать позицию в файле (ftell) перед чтением строки, проверять и заменять первый знак в строке, с помощью fseek(file,0,SEEK_SET) возвращать указатель файла, и писать с помощью write или fputs.
0
Hana
Сообщений: n/a
07.08.2011, 20:46 #4
спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2011, 20:46
Привет! Вот еще темы с ответами:

Запись в бинарный файл работает не коректно, где ошибка? - C++
Здравствуйте, делаю лабораторную работу, запись структуры Students в бинарный файл. код написал, но он работает корректно только при первом...

Как работает горизонтальная табуляция или где ошибка - C++
struct dbcars { char name; char color; int year; float cost; }; dbcars car;

Не работает программа поиска несовпадения скобок со стеком, где ошибка*? - C++
Добрый день, задали задачу Есть строка символов, признаком конца, которой являет- ся ;. В строке могут быть фигурные, круглые, квадратные...

Почему не работает sqrt? Подскажите, где ошибка? Простенькая программа с тремя функциями - C++
#include &quot;stdio.h&quot; #include &lt;math.h&gt; #include &quot;stdafx.h&quot; double rekur(int k) { if(k==0)return 0; else return...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
07.08.2011, 20:46
Ответ Создать тему
Опции темы

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