Открытие файлов,ошибка
Дан текстовый файл,переписать в другой файл все строки первого,заменив 1 на 0,и наоборот. assert выдает ошибку на открытие второго файла,в чем проблема?оба файла существуют. И правильно ли я написал код?
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
int main(void){
char a[300];
int f,i;
char c;
FILE *f1;
FILE *f2;
f1 = fopen("f1.txt", "r"); assert(f1);
f2 = fopen("f2.txt", "w"); assert(f2);
for(i=0;!feof(f1);i++){
fscanf(f1,"%c",&c);
if(c=='1'){
c='0';
fprintf(f2,"%s",c);
continue;
}
if(c=='0'){
c='1';
printf("test");
fprintf(f2,"%s",c);
}
}
fclose(f1);
fclose(f2);
return 0;
}
Ответы (2 шт):
Неправильно писали бы в файл. Читаете буквами, пишете строками. И сразу у вас будет ошибка памяти. Проверка на feof нужно только после fscanf.
Исправил ошибки , у меня всё пишется в файл нормально.
// gcc -Wall -Wextra -Wpedantic -Winline -std=c11 -Os fopen.c -o fopen
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
int main(void){
int i;
char c;
FILE *f1;
FILE *f2;
f1 = fopen("f1.txt", "r"); assert(f1);
f2 = fopen("f2.txt", "w"); assert(f2);
for(i=0;1;i++){
int nr = fscanf(f1,"%c",&c);
if(nr != 1)
break;
if(c=='1'){
c='0';
fprintf(f2,"%c",c);
continue;
}
if(c=='0'){
c='1';
fprintf(f2,"%c",c);
continue;
}
fprintf(f2,"%c",c);
}
fclose(f1);
fclose(f2);
return 0;
}
assert выдает ошибку на открытие второго файла, в чем проблема?
Скорее всего, или уже есть файл с атрибутом ReadOnly, или прав для записи файла не хватает.
Еще у вас несоответствие форматных строк типу:
fprintf(f2,"%s",c);
Ну, и читать символы с помощью fscanf - из пушки по воробьям...
Ну, и я бы делал так:
int main(void)
{
int c;
FILE * f1 = fopen("f1.txt", "r"); assert(f1);
FILE * f2 = fopen("f2.txt", "w"); assert(f2);
while((c = fgetc(f1))!=EOF)
{
switch (c) // Или if (с == '1') с = '0'; else if (с == '0') с = '1';
{
case '0': c = '1'; break;
case '1': c = '0'; break;
}
fputc(c,f2);
}
fclose(f1);
fclose(f2);
}