Този код трябва да пропусне ред от файл и да запише всичко останало в различен файл, да изтрие оригиналния и да преименува различния на изтрития. Това, което не е наред с този код, е, че не работи след първия файл, т.е. вторият файл не се изтрива, нито се създава нов файл с пропуснатия ред на файла. какъв е проблема? Трябва ли да прави нещо с функцията за премахване на преименуване?
FILE *lname
FILE *id
FILE *rep
lname = fopen("lname.txt", "r");
id = fopen("id.txt", "r");
rep = fopen("rep.txt", "w+");
char ch1,ch2;
int temp=1,delete_line=3; /*(delete_line is supposed to be taken as an input)*/
ch1 = getc(lname);
while (ch1 != EOF)
{
if (ch1 == '\n')
temp++;
if(delete_line==1) {
if (temp == 2 && ch1 == '\n')
ch1 = getc(lname);
}
if (temp != delete_line)
putc(ch1, rep);
ch1 = getc(lname);
}
fclose(lname);
fclose(rep);
remove("lname.txt");
rename("rep.txt","lname.txt");
rep = fopen("rep.txt", "w+");
ch2 = getc(id);
while (ch2 != EOF)
{
if (ch2 == '\n')
temp++;
//except the line to be deleted
if (temp == 2 && ch2 == '\n') //making sure to skip a blank line if delete_line=1
ch2 = getc(id);
if (temp != delete_line)
putc(ch2, rep);
ch2 = getc(id);
}
fclose(id);
fclose(rep);
remove("id.txt");
rename("rep.txt","id.txt");
данни в id.txt
asd123
xcv1323
rijr123
eieir2334
данни в lname.txt
Bipul Das
Star Lord
Tony Stark
Vin Diesel
temp=1
след като прочетете първия файл. - person Johnny Mopp   schedule 08.06.2020ch1
иch2
? Те трябва да са типint
. - person Ian Abbott   schedule 08.06.2020while
циклите може да бъде малко опростен, напр.ch1 = getc(lname);
while (ch1 != EOF)
{
if (temp != delete_line)
putc(ch1, rep);
if (ch1 == '\n')
temp++;
ch1 = getc(lname);
}
. - person Ian Abbott   schedule 08.06.2020w
в режима води до съкращаване на съдържанието на файла до нищо по време на процеса на отваряне на файла. 2) когато извикватеfopen()
, винаги проверявайте (!=NULL) върнатата стойност, за да сте сигурни, че операцията е била успешна. - person user3629249   schedule 09.06.2020ch2 = getc(id); while (ch2 != EOF)
много по-добре да комбинирате тези два реда в:while( (ch2 = getc(id) ) != EOF )
и да премахнете повикването къмgetc()
в края на цикъла - person user3629249   schedule 09.06.2020