我已经学习C了1周,从我所学到的知识开始,直到现在,我决定制作一个程序,该程序将有关一个人的信息存储在.TXT文件中(例如,号码,姓氏,姓氏等),但是能够要输入任何信息,您必须首先创建一个密码(或什至超过1个),然后登录。所有这些密码都保存到PASSWORDS.TXT,当您要登录并输入密码时,它将扫描文件并比较密码和如果输入的密码在那里,则可以继续,否则将关闭程序。
现在这是我面临的问题:
在我重新启动该程序后,删除了前一个密码中的每个密码(它们都被重写了),名称和已在该程序中输入的所有这些信息也发生了同样的情况。是否有任何功能/或者甚至重新启动后如何存储所有功能的方法?对不起,我的英语不好和解释能力不好,这不是我的母语,我试图在Google上搜索它,但我听不懂,或者不是我要找的情况。
一个例子 :
PASSSORDS.TXT第一次:
123456 342478 asdds45789 145vwrf
关闭程序并重新启动后,然后创建新密码(例如new123 asd456),PASSWORDS.TXT内部看起来像
PASSWORDS.TXT第二次:
new123 asd456
我将非常感谢您提供的任何指南。
#include <stdio.h>
#include <string.h>
void emptyBuffer() {
char c = 'a';
while (c != '\n' && c != EOF) {
c = getchar();
}
return;
}
int main()
{
FILE *fw, //na zapis
*fr; //na citanie
char heslo[256],heslo2[256];
int c,p,i,dlzka,index,j,cislo,konec = 0,pocet = 0; //pocitadla
char buffer[1024],string[10];
printf("Toto je program na vytvorenie pristupoveho hesla\n\n");
fw = fopen("C:/Users/Marek/Desktop/HESLA.TXT","w");
do {
printf("Enter your password: ");
scanf("%s",&heslo);
emptyBuffer();
fprintf(fw,"%s ",heslo);
printf("Do you want to create another password?A/N");
c = getchar();
} while (( c == 'a') || ( c == 'A'));
fclose(fw);
printf("Now you can log in with your created passwords\n\n");
fr = fopen("C:/Users/Marek/Desktop/HESLA.TXT","r");
printf("Zadaj prihlasovacie heslo: ");
scanf("%s",&heslo2);
dlzka = strlen(heslo2);
while ((c = fgetc(fr)) != EOF)
pocet++;
fclose(fr);
fr = fopen("C:/Users/Marek/Desktop/HESLA.TXT","r");
while (fscanf(fr, " %1023[^\n]", buffer) != EOF)
{
}
for (i = 0; i <= pocet; i++){
if (heslo2[0] == buffer[i]){
index = i+1;
p = 1;
for (j = 1;j < dlzka; j++ ){
if (heslo2[j] == buffer[index]) {
index++;
p++;
}
else
break;
}
if (p == dlzka && buffer[index] == ' ')
konec = 1;
else
konec = 0;
}
}
fclose(fr);
if (konec == 1){
if ((fw = fopen("C:/Users/Marek/Desktop/UDAJE.TXT", "w")) == NULL) { // test suboru
printf("Subor UDAJE.TXT sa nepodarilo otvorit\n");
return 1;
}
printf("\nYou were sucsesfully loged in\n");
printf("Here you can enter datas\n");
int index1 = 0;
do {
index1++;
printf("Enter your name: ");
scanf("%s", &string);
fprintf(fw, "%d\n%s\n",index1, string);
printf("Enter your number: ");
scanf("%d",&cislo);
fprintf(fw, "%d\n",cislo);
printf("If u wanna add more datas press a/A otherwise press N: ");
emptyBuffer();
c = getchar();
} while (( c == 'a') || ( c == 'A'));
if (fclose(fw) == EOF) // test uzavretia suboru
printf("Subor UDAJE.TXT sa nepodarilo zavret\n");
}
else
printf("You have entered an invalid password");
return 0;
}
使用我的语言,部分旧代码很快就会将其翻译成英语。
问题是您使用打开文件fw = fopen("C:/Users/Marek/Desktop/HESLA.TXT","w");
。如果您要打开的文件已经存在,这将删除其中的内容,并从文件开头重新开始写入。您想要更改"w"
为"a"
,该值将追加到文件末尾,并且保持原文件中的内容不变。
该参考资料包括更多信息和有关文件打开模式的便捷表格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句