2011-04-28 42 views
1

我努力比较用户输入与文件内容。基本上我创建了一个函数,用于更新首先提示雇员姓名的员工详细信息,然后将输入的姓名与文件中的姓名进行比较。我试着这样做:我正在努力与strcmp在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); 
} 
+7

你有问题吗? – 2011-04-28 18:22:08

+4

getc返回单个字符(字母)。您需要从文件中读取整个单词并将其传递给strcmp。 – user168715 2011-04-28 18:22:49

+0

对于那些在文件中......但(a)你不迭代,(b)你从文件中读取名称(getc读取下一个字符..)和(c)你有什么实际问题... – 2011-04-28 18:24:38

回答

1

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

3

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

strcmp方法签名为:

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

你在呼唤它:

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

不仅如此,但你要读你过去的STR1字符缓冲区,如果你修复它使它编译,除非碰巧是字符0,它不会。

为了解决这个问题,必须执行下列操作之一:

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

我的问题是,我想输入一个名称,然后检查名称是否在文件文件中。如果名称在文件中,那么应该显示员工的详细信息 – TaIra 2011-04-28 19:36:40

+0

@Talara您需要将我的答案与Mario的答案混合使用。然后,将用户输入作为字符串读入(例如'char search [90]; if(fgets(search,90,stdin)!= NULL){/ * compare * /}' )并使用'strcmp'比较字符串。 – pickypg 2011-04-28 20:06:40

0

一个提示:

EMPLOYEE fileData; 

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

编辑:改读FREAD,因为它是一个FILE *

心连心

+0

我应该在函数本身或主函数中执行该操作吗? – TaIra 2011-04-28 19:40:32

+0

功能。这将允许您读取所有记录(假设您将EMPLOYEE写入文件) – 2011-04-28 19:43:00