-1
A
回答
3
首先,您似乎沒有將正確的參數傳遞給fseek
(更具體地說是最後一個參數)。其次,文本文件中的行很少有固定的寬度,所以你不能使用特定的數字來返回「四行」。
相反,您必須一次尋找一個字符以找到正確的位置。這是不使用查找功能,並根據該文件,你可能會想要麼
- 閱讀這一切到內存緩衝區,其中可以很容易地「求」
- 作爲替代以上,內存非常有效映射整個文件
- 商店行萬事開頭的位置,所以你可以很容易地跳來跳去
0
所以fseek
不能由一個或兩行回去?你能給我一個簡單的例子嗎?
fp= fopen("liste.txt", "r"); // this is where i have list of names and ages and and ...
new_fp=fopen("sec_list.txt","w");// this is where i will stock new infos
do {
fgets(ligne, 100, fp);
if (strcmp(tel, ligne)!=0) // if "Tel" isnt the same content as "Ligne"
{
fputs(ligne, new_adherent);
}
else {
printf("\n the adherent is founded \n");
fseek (fp, -124, -4);// back by 124 caractere and 4 lines or something like that
do{
ch = fgetc(fp);
if(ch == '\n'){
lines++;
}
}while (lines<7);
printf("\n\t DELETED \n");
}
}while(!feof(fp));
fclose(fp);
fclose(new_fp);
remove("liste.txt");
rename("new_liste.txt", "liste.txt");
+1
歡迎來到Stack Overflow。代碼佈局令人震驚 - 請修復。小心使用'feof()' - 這裏的代碼在'do ... while(!feof(fp));'循環中使用它可能是正確的,但通常根本沒有必要使用它。更重要的是,'-4'打算做什麼?它是100%非猶太教徒。 –
你可以顯示你的代碼,並解釋到底什麼是行不通的? – Marievi
'fseek'隻影響圖書館認爲讀取/寫入的下一個文件位置的位置。它不會影響屏幕上已有的輸出。你可以打印出''\ b''來刪除已經寫好的字符,但是當你讀到一行的開頭時,不能保證它會繼續刪除前一行的字符。爲了可靠地做你想做的事情,你需要超出標準庫提供的功能(例如,你可能想用'curses'來看看)。 –