Удалить из файла все числа, число бит установленных в единицу, в которых более трех - C (СИ)
Формулировка задачи:
Народ нужна помощь, у меня есть задание: Файл содержит целые числа. Удалить из файла все числа, число бит установленных в единицу, в которых более трех.
Я попытался сделать это следующим способом при преобразовании числа в двоичную форму сразу осуществляется проверка на то сколько раз 1 входит в это число и в случае если оно больше 3 возвращает 0, иначе записывает число.
Но что то пошло не так и я никак не могу привести эту программу в полностью рабочее состояние, помогите пожалуйста. Я прикрепил файл с исходными числами.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <windows.h>
#include <conio.h>
#include <math.h>
int dvoich(int x1)
{
int i, b,l=0;
char p[7];
long c = 0;
for(i=0;x1 > 0;i++)
{
b = x1 % 2;
x1 = (x1-b)/2;
c += b * pow(10,i);
}
sprintf(p,"%d",c);
for(i=1;i<=6;i++){
if (strcmp(p[i],"1")==0){
l++;
if (l==3){return 0;}
}
}
// printf("\nDvoichnoe chislo: %d",c);
return c;
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "RU");
FILE *f;
FILE *f1;
int c;
int bal;
f = fopen("some_file.txt", "r");
printf("Наш файл:\n");
while ((c = getc(f)) != EOF){
putc(c, stdout);
}
fclose(f);
f = fopen("some_file.txt", "r");
f1= fopen("dvoich.txt", "w");
while ((c = getc(f)) != EOF){
if(isdigit(c)){
fprintf(f1,"%d ",dvoich(c));
}
}
fclose(f1);
fclose(f);
printf("\n");
printf("Двоичная форма:\n");
f1= fopen("dvoich.txt", "r");
if (f1 == NULL)
printf ("Ошибка при открытии файла");
else {
while (!feof(f1)){
fread(&bal, sizeof(char),1, f1);
printf ("%c", bal);
}
}
printf("\n");
fclose(f);
fclose(f1);
return 0;
}Решение задачи: «Удалить из файла все числа, число бит установленных в единицу, в которых более трех»
textual
Листинг программы
int CountBit(int n)
{ int count = 0;
while(n) {
if (n&1) count++;
n = (n>>1);
}
return count;
}
Объяснение кода листинга программы
В данном коде представлена функция с именем CountBit, которая принимает целочисленный аргумент n и возвращает количество установленных бит в этом числе. Для этого используется цикл while, который выполняется до тех пор, пока число n не станет равным нулю. Внутри цикла проверяется, установлен ли в числе n бит, и если да, то увеличивается счетчик count. После выполнения цикла возвращается значение счетчика count. Код не содержит операций по удалению чисел из файла, поэтому задача, описанная в вопросе, не решается этим кодом.