Все нули в файле заменить единицами, а единицы нулями - C (СИ)
Формулировка задачи:
помогите переделать текст этой задачи с Паскаля на язык С
Ввести файл F . Все нули в файле заменить единицами, а единицы нулями. Файл вывести до и после преобразования Код Pascaluses crt;
var f:file of byte;
i,a:byte;
begin
randomize;
assign(f,'file');
rewrite(f);
for i:=1 to 20 do
begin
a:=random(5);
write(f,a)
end;
writeln('Содержание исходного файла');
seek(f,0);
for i:=0 to filesize(f)-1 do
begin
seek(f,i);
read(f,a);
write(a:3);
if a in [0..1] then a:=1-a;
seek(f,i);
write(f,a);
end;
writeln('');
writeln('Содержание измененного файла');
seek(f,0);
for i:=0 to filesize(f)-1 do
begin
read(f,a);
write(a:3);
end;
close(f);Решение задачи: «Все нули в файле заменить единицами, а единицы нулями»
textual
Листинг программы
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void main(void) {
FILE *f;
char i,a;
long int filesize;
srand(time(NULL));
f = fopen("C:\\file", "w+");
for (i = 1; i <= 20; i++){
a = rand() % 6;//от нуля до 5
fprintf(f, "%c", a);
};
fflush(f);
printf("Содержание исходного файла\n");
//мы находимся в конце файла, значит размер файла это его текущая позиция ftell
filesize = ftell(f);
fseek(f, 0, SEEK_SET);
for (i = 0; i <= filesize - 1; i++) {
fseek(f, i, SEEK_SET);
fscanf(f, "%c", &a);
printf("%3i", a);
if ((a == 0) || (a == 1)) a = 1 - a;
fseek(f, i, SEEK_SET);
fprintf(f, "%c", a);
};
printf("\n");
printf("Содержание измененного файла\n");
fseek(f, 0, SEEK_SET);
for (i = 0; i <= filesize - 1; i++) {
fscanf(f, "%c", &a);
printf("%3i", a);
};
fclose(f);
};
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменные: FILE *f, char i, a, long int filesize
- Инициализируем генератор случайных чисел
- Открываем файл
C:\\fileв режиме записи и чтения - Записываем в файл 20 символов, сгенерированных случайным образом от 0 до 5
- Перемещаем позицию файла в начало
- Читаем файл посимвольно и если символ равен 0 или 1, то меняем его на противоположный
- Закрываем файл