Что бы я хотел: Чтение битов из одного файла (входного файла) и запись этих (с некоторой вероятностью) инвертированных битов в другой файл (выходной файл).C: одновременное чтение и запись в файл
Какая проблема: Вероятностная идея кажется неработоспособной. И что более важно, выходной файл всегда содержит больше символов, чем исходный входной файл, в то время как они должны содержать одинаковое количество символов.
В этом примере коды, вместо инвертированных бит я поставившие «х» и «у», так что это более очевидно, что выходной файл содержит больше символов
входного файла: 01001
ВЫХОДНОЙ файл: xyxxxyx
код:
void invert_bits(FILE **input, FILE **output, double prob){
srand(clock());
char symbol;
while((symbol = getc(*input)) != EOF){
double result = rand()/RAND_MAX;
if(result < prob){
if(simbol == '0'){
char bit = 'x';
fprintf(*output, &bit);
}
else{
char bit = 'y';
fprintf(*output, &bit);
}
}else{
fprintf(*output, &symbol);
}
}
}
Вы уверены, что это правильно?Вы можете проверить, просмотрев временную метку файла или переименовав файл, но не меняя программу. –
Передача адреса 'char' в качестве параметра формата в' printf' почти наверняка неверна. Вероятно, происходит то, что локальная переменная с 'y' находится в памяти до локальной переменной с' x', и за ними следуют '\ 0', поэтому в любое время вы пытаетесь напечатать' y' you print' yx вместо этого. – millimoose
Вы не можете «записывать биты» - только байты. –