我在c中与strcmp挣扎

时间:2011-04-28 18:20:36

标签: c

我很难将用户输入与文件内容进行比较。基本上我创建了一个更新员工详细信息的功能,该功能首先提示输入员工的姓名,然后将输入的名称与文件中的名称进行比较。我试过这样做:

void update(EMPLOYEE *details)
{
    FILE *file;
    char search;
    file = fopen("employees.txt","r");
    if(file == NULL)
    {
        printf("File error!!!");
        exit(0);
    }
    else
    {
        search = getc(file);
        printf("Enter name: ");
        scanf("%s",details->name);

        if((strcmp(search,details->name) == 0))
        {
            printf("%s\n",details->name);
            printf("%d",details->employeeNumber);
        }
    }

    fclose(file);
}

3 个答案:

答案 0 :(得分:3)

您正在比较单个字符search与(我假设)整个字符串details->name

strcmp的方法签名是:

int strcmp (const char *str1, const char *str2);

您将其称为:

int strcmp (const char str1, const char *str2);

不仅如此,如果你修改它以使其编译,你将会读取你的str1字符缓冲区,除非碰巧是字符0,它不会是。

要解决此问题,您必须执行以下操作之一:

  • 更改您的比较以仅查看第一个字符。
  • 将您的搜索变量更改为字符串(可能是char [])并读入整个字符串,然后进行比较。

答案 1 :(得分:1)

strcmp需要一个字符串(char *)而不是一个字母。正如其他人在评论中提到的那样,您需要更新getc进程以阅读超过单个字母的内容。

答案 2 :(得分:0)

提示:

EMPLOYEE fileData;

while ( fread( &fileData, sizeof( fileData ), 1, file ) == sizeof( fileData )
{
...
}

编辑:将读取更改为fread,因为它是文件*

HTH