我正在编写一个允许多个用户创建,保存和加载数据到文件的程序。我遇到了一个我无法找到的问题似乎找出了一个不允许用户创建重复文件名的逻辑。
到目前为止,这是我的代码的重要工作部分,但我的问题在哪里。变量user
在我的程序启动时分配,用户必须输入其用户名和密码。
else if (selection == 6)
{
int i;
int d;
printf("Please enter a file name: ");
scanf("%s", filename);
newFile = fopen(filename, "a+");
Record = fopen("records.txt", "a+");
fprintf(Record, "%s %s\n", user, filename);
for (i = 0; i < icount; i++)
{
fprintf(newFile, "%d ", ints[i]);
}
for (d = 0; d < dcount; d++)
{
fprintf(newFile, "%lf ", doubles[d]);
}
fclose(Record);
fclose(newFile);
}
else if (selection == 7)
{
printf("Please enter a file name: ");
scanf("%s", filename);
Record = fopen("records.txt", "a+");
while (fscanf(Record, "%s %s", curuser, curfile) != EOF)
{
if (strcmp(user, curuser) == 0 && strcmp(filename, curfile) == 0)
{
int c;
//fopen(newFile, "a+");
newFile = fopen(filename, "a+");
if (newFile) {
while ((c = getc(newFile)) != EOF)
{
putchar(c);
}
fclose(newFile);
break;
}
}
else
{
printf("You don't have access to this file.\n");
break;
}
}
}
在选择6的某个地方,我试图在代码中说,&#34;好的用户,输入一个文件,除非该名称已经存在。&#34;我试过的是
while (fscanf(Record, "%s %s", curuser, curfile) != EOF)
{
if (strcmp(curfile, filename) == 0)
{
break;
}
else
{
fprintf(Record, "%s %s\n", user, filename);
fclose(Record);
}
}
我无法弄清楚为什么这不会起作用。我尝试将此代码放在Record
文件声明下面。
我认为问题可能是当记录文件为空时,!= EOF
行会导致它中断,但我也无法找到最初获取一个用户和文件名的方法在探测其余用户的文件名之前的记录。任何正确方向的指导都将受到赞赏!
答案 0 :(得分:0)
我认为你可以通过在几个部分中切割while循环来解决你的问题:
fscanf
最后,
我会写一些类似的东西:
int record_found = 0;
int scanf_res;
while (1)
{
/* do the fscanf */
scanf_res = fscanf(Record, "%s %s", curuser, curfile);
/* test for end of file */
if (EOF == scanf_res)
{
/* end of file reached */
break;
}
/* if fscanf has mado 2 conversion AND
filename is curfile */
if ((2 == scanf_res) && (strcmp(curfile, filename) == 0))
{
record_found = 1;
break;
}
}
if (!record_found)
{
/* add user if needed */
fprintf(Record, "%s %s\n", user, filename);
}
/* and close file in all cases */
fclose(Record);