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

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

Восстановить пароль Регистрация
 
Hana
Сообщений: n/a
06.08.2011, 02:59     fputc не работает, укажите где в програмке ошибка #1
В С создается файл и выполняется над ним работа. Создается файл, вводится в него текст, где слова разделены ' ' (пробелом), линии ':' ( двоеточием). В конце файла устанавливается '!'( воскл.знак). Нужно создать функцию в которую передается файл и символ, эта функция должна изменять первый символ каждой линии на символ который передали как параметр. В конце вывести содержимое файла в главной функции.
Програмку написала, все работает кроме fputc в функции которая должна изменять первый символ каждой строки на новый, переданный.она вставляет только первый... в следующие строки не вставляет.
#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);

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

fputc(symbol,file);
fseek (file, 0, SEEK_CUR);

надо удалить нафиг (именно по этому замена происходит только в первой строке.

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

Если же возможно появление знака для замены внутри строки, то надо читать файл по-строково, запоминать позицию в файле (ftell) перед чтением строки, проверять и заменять первый знак в строке, с помощью fseek(file,0,SEEK_SET) возвращать указатель файла, и писать с помощью write или fputs.
Hana
Сообщений: n/a
07.08.2011, 20:46     fputc не работает, укажите где в програмке ошибка #4
спасибо
Yandex
Объявления
07.08.2011, 20:46     fputc не работает, укажите где в програмке ошибка
Ответ Создать тему
Опции темы

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