2016-03-07 39 views
0

我在remove()函數中遇到問題。這是非常簡單的程序會將2d矩陣複製到kimenet.txt,我想刪除bemenet.txt在c中使用remove函數

問題:爲什麼我的程序返回-1時應該是0?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int **a,n,i,j; 
    FILE *fin,*fout;; 
    fin = fopen("bemenet.txt","rt"); 
    if(!fin){printf("Error");return EXIT_FAILURE;} 
    fout = fopen("kimenet.txt","wt"); 
    if(!fout){printf("Error");return EXIT_FAILURE;} 
    fscanf(fin,"%i",&n); 
    a = (int**)malloc(n*sizeof(int*)); 
    for(i = 0; i < n; ++i){ 
     a[i] = (int*)malloc(n*sizeof(int)); 
     for(j = 0; j <n; ++j){ 
      fscanf(fin,"%i",&a[i][j]); 
     } 
    } 

    for(i = 0; i < n; ++i){ 
     for(j = 0; j < n; ++j){ 
      fprintf(fout,"%4i ",a[i][j]); 
     } 
     fprintf(fout,"\n"); 
    } 
    int ret = remove("kimenet.txt"); 
    if(ret == 0){ 
     printf("Deleted succesfully"); 
    } 
    else printf("Error"); 

    fclose(fin); 
    fclose(fout); 

    return EXIT_SUCCESS; 
} 
+4

您嘗試刪除該文件,而它仍然開放 –

+1

您要刪除'kimenet.txt',不'bemenet.txt'。此外,如果您在Windows上(每次打開時都會得到一個免費的強制鎖),該文件可能不可移動。 – Hasturkun

+1

除了指針指針之外,還可以考慮使用二維數組。然後您可以通過一次調用'fread'來讀取整個文件,並且不會出現碎片。 – Lundin

回答

0

如果不關閉文件,則無法刪除文件...先使用fclose關閉文件。

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int **a, n, i, j; 
    FILE *fin, *fout;; 
    fin = fopen("bemenet.txt", "rt"); 
    if (!fin){ printf("Error"); return EXIT_FAILURE; } 
    fout = fopen("kimenet.txt", "wt"); 
    if (!fout){ printf("Error"); return EXIT_FAILURE; } 
    fscanf(fin, "%i", &n); 
    a = (int**)malloc(n*sizeof(int*)); 
    for (i = 0; i < n; ++i){ 
     a[i] = (int*)malloc(n*sizeof(int)); 
     for (j = 0; j <n; ++j){ 
      fscanf(fin, "%i", &a[i][j]); 
     } 
    } 

    for (i = 0; i < n; ++i){ 
     for (j = 0; j < n; ++j){ 
      fprintf(fout, "%4i ", a[i][j]); 
     } 
     fprintf(fout, "\n"); 
    } 

    fclose(fin); //move fcloses here 
    fclose(fout); 

    int ret = remove("kimenet.txt"); 
    if (ret == 0){ 
     printf("Deleted succesfully"); 
    } 
    else printf("Error"); 


    return EXIT_SUCCESS; 
}