我最近开始在C中制作一个程序,只是为了好玩,一个在文件中记住"银行账户"的程序。
所以我做了一个"删除"函数,可以根据某个"帐户"的Id删除它。下面是它的工作原理:我创建了一个临时函数,在那里我放了所有的"帐户",但没有放有请求Id的帐户。然后,我删除了原始文件,然后用原始文件的名称重命名临时文件。
这就是它应该如何工作,但你猜怎么着,事实并非如此。我的意思是,这个函数运行得很好,只是重命名和删除函数不起作用,它们给出了"-1"的消息。
我搜索了一下,我在Stack Overflow上找到了很多关于这个主题的问题,但我找不到答案,这就是我这么做的原因。
这个程序是罗马尼亚语的,我只为你们翻译了"删除"功能。如果你还需要整个程序,请告诉我。
void delete()
{
FILE *f,*g;
struct date s;
int c=0;
char id[5],pass[10];
g=fopen("temp.txt","w");
if((f=fopen("baza.txt","r+"))==NULL){ /* checking the existence of the file */
printf("Error - File not found! n");
getch();
return;
}
printf("nEnter the desired Id whose account you want to delete: ");
scanf("%s",id);
while(fscanf(f,"%s%s%s%s%s",s.id,s.nume,s.prenume,s.suma,s.parola)!=EOF)
{
if(strcmp(s.id,id)==0)
{
do{
system("cls");
printf("nnnn");
if(c==0)
{
printf("Introduce the password for the account with ID %s: ", s.id);
scanf("%s",&pass);
}
else{
if(c==1)
{
printf("Wrong password, try again: ");
}
if(c>1&&c<6)
{
printf("Wrong password %d times!, try again: ",c);
}
if(c==6)
{
printf("Wrong password %d times, the program will shutdown! n",c);
printf("Press any key to exit..n");
getch();
exit(0);
}
scanf("%s",&pass);
}
c++;
}while(strcmp(s.parola,pass)!=0);
}
if(strcmp(s.id,id)!=0)
{
fprintf(g,"%10s%20s%25s%15sn",s.id,s.nume,s.prenume,s.suma);
}
fclose(f);
fclose(g);
}
rename("temp.txt","baza.txt");
getch();
}
尝试这样做,这样printf就不会再次调用rename来尝试调用不存在的文件。
int returnvalue = rename("temp.txt","baza.txt");
printf("%d",returnvalue);
getch();
我2分钟前也遇到了同样的问题。当ı意识到ı在重命名后试图删除文件时,我的问题就解决了。我认为程序不会更改名称,因为该名称已经被使用了。当ı第一次删除旧文件,然后重命名它时,它起作用了。