gpt4 book ai didi

检查文件中是否有匹配的字符串

转载 作者:行者123 更新时间:2023-11-30 16:38:58 25 4
gpt4 key购买 nike

我正在编写一个程序,允许多个用户创建、保存数据并将数据加载到文件中。我遇到了一个问题,我找不到似乎找出不允许用户创建重复文件名的逻辑。

这是迄今为止我的代码的重要工作部分,但我的问题出在哪里。变量 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 中的某个位置,我试图用代码说:“好吧,用户,输入一个文件,除非该名称已经存在。”我尝试过的是

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 行导致它中断,但我也无法找到一种最初获得一个用户的方法和文件名在记录中,然后再探测其他用户的文件名。任何正确方向的指导将不胜感激!

最佳答案

我认为你可以通过将 while 循环分成几个部分来解决你的问题:

  1. 执行fscanf
  2. 检查文件结尾
  3. 检查“已找到用户”

最后,

  • 如果之前没有在文件中,则写入用户。
  • 我会写这样的内容:

    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);

    关于检查文件中是否有匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47256654/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com