Задача с бинарными файлами...
В исходном бинарном файле (создать и ввести) найти наибольшее количе-ство цифр, расположенных подряд. Результат (найденные числа) переписать в другой текстовый файл.
Решение
#include <stdlib.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
main()
{
FILE *fp,*fp2;
int i=0,dlslova=0,p=0,d=0,dl=0,value;char str[80];
//dlslova - считает текуў посл цифр
//i хранит тек позиццию
//p хранит длину тек последовательности
//d хранит найбольшую длину послед цифр
//dl хранит позицию с которой нач найбольшая послед цифр
//value переменная для считывания из файла
fp = fopen("int.dat", "rb");
if (!fp) {
puts("Can?t open int.dat");
exit(1);
}
while(!feof(fp))
{
fread(&value, sizeof(int), 1, fp);
if (isdigit(value))
{
dlslova++;
printf("s=%d i=%d d=%d\n", value, i, dlslova);
}
else
{
p=dlslova;
if (p>d)
{
d=p;
dl = i-p;
}
dlslova=0;
}
i++;
}
printf("d=%d dl=%d d=%d", dlslova, dl, d);
fseek(fp, dl, SEEK_SET);
fp2 = fopen("out.dat", "w");
fread(&value, sizeof(int), d, fp);
fwrite(&value, sizeof(int), d, fp2);
fclose(fp2);
fclose(fp);
getch();
return 0;
}
Компилится без ошибок и вроде работает правильно но записывать в до=ругой файл не хочет ошибка вроде из за исп фсиик но если ее убрать то записывает в новый файл посл от начала а надо от позиции самаго длинной последовательности.....
В исходном бинарном файле (создать и ввести) найти наибольшее количе-ство цифр, расположенных подряд. Результат (найденные числа) переписать в другой текстовый файл.
Решение
...
Компилится без ошибок и вроде работает правильно но записывать в до=ругой файл не хочет ошибка вроде из за исп фсиик но если ее убрать то записывает в новый файл посл от начала а надо от позиции самаго длинной последовательности.....
Сразу что бросилось в глаза...
Цифра - это чар от '0' до '9'... так? почему ты из файла читаешь инт?
И что это???
fread(&value, sizeof(int), d, fp);
fwrite(&value, sizeof(int), d, fp2);
ты пишешь по адресу переменной value 4*d байтов... а ты не забыл пямять выделить под это все? При чем такой метод при данной задаче не верен
Это я знаю просто еслі ты заметил то я что мне надо еще считать количество цифр смысл загонять все в строку потом там считать и т д.. Если можно сразу посимвольно так лучше имхо... Да цифра это от 0 до 9 какаю разница что считывать если мне нужно для проверки и проверяет оно правильно где цифры а где нет...
Это я считываю из первого файла нужное колво символов и переписываю во второй, все странносит в том что без фсика все работает тока считывает сначала файла а мне нужно с пизиции которая храниться в переменной dl, и вото когда я ее ставлю в процессе работы возникает ошибка...
Какой подход предлагаешь ты...
Вот тебе решение, надеюсь разберешся что и где у тебя было не так?
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
void main()
{
FILE *in,*out;
in = fopen("int.dat", "rb");
if (!in)
return;
unsigned char ch;
int dcount = 0; // макс кол-во цифр
int dpos = 0; // позиция максимума
int tmpcount = 0;
int tmppos = 0;
int curpos = 0; //текущая позиция
while(!feof(in))
{
ch = fgetc(in);
if (isdigit(ch))
{
if ( tmpcount == 0 )
tmppos = curpos;
tmpcount++;
}
else
{
if ( tmpcount > dcount )
{
dcount = tmpcount;
dpos = tmppos;
}
tmpcount = 0;
}
curpos++;
}
if (dcount)
{
char * chars = new char[dcount];
fseek(in, dpos, SEEK_SET);
fread(chars, dcount,1, in);
out = fopen("out.dat", "w");
fwrite(chars, dcount, 1, out);
fclose(out);
delete chars;
}
fclose(in);
system("PAUSE");
return;
}