I';我用strcmp在c中挣扎
我正在努力比较用户输入和文件内容。基本上,我创建了一个更新员工详细信息的函数,该函数首先提示输入员工的姓名,然后将输入的姓名与文件中的姓名进行比较。我试着这样做:I';我用strcmp在c中挣扎,c,C,我正在努力比较用户输入和文件内容。基本上,我创建了一个更新员工详细信息的函数,该函数首先提示输入员工的姓名,然后将输入的姓名与文件中的姓名进行比较。我试着这样做: void update(EMPLOYEE *details) { FILE *file; char search; file = fopen("employees.txt","r"); if(file == NULL) { printf("File error!!!");
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);
}
strcmp
接受一个字符串(char*
),而不是一个字母。正如其他人在评论中提到的那样,您需要更新getc
过程以读取多个字母。strcmp
采用字符串(char*
)而不是单个字母。正如其他人在评论中提到的那样,您需要更新getc
过程以读取多个字母。您正在将单个字符search
与整个字符串details->name
进行比较
签名的方法是:
你称之为:
int strcmp (const char str1, const char *str2);
不仅如此,如果您修复str1字符缓冲区使其编译,那么您将读取超过它的数据,除非它恰好是字符0,否则它不会是字符0
要解决此问题,必须执行以下操作之一:
- 更改比较以仅查看第一个字符
- 将搜索变量更改为字符串(可能是char[]),并读入整个字符串,然后进行比较
搜索
与整个字符串详细信息->名称
进行比较
签名的方法是:
你称之为:
int strcmp (const char str1, const char *str2);
不仅如此,如果您修复str1字符缓冲区使其编译,那么您将读取超过它的数据,除非它恰好是字符0,否则它不会是字符0
要解决此问题,必须执行以下操作之一:
- 更改比较以仅查看第一个字符
- 将搜索变量更改为字符串(可能是char[]),并读入整个字符串,然后进行比较
- 提示:
EMPLOYEE fileData;
while ( fread( &fileData, sizeof( fileData ), 1, file ) == sizeof( fileData )
{
...
}
编辑:已将读取更改为fread,因为它是一个文件*
hth提示:
EMPLOYEE fileData;
while ( fread( &fileData, sizeof( fileData ), 1, file ) == sizeof( fileData )
{
...
}
编辑:已将读取更改为fread,因为它是一个文件*
hth您有问题吗?getc返回单个字符(字母)。您需要从文件中读取整个单词,并将其传递给strcmp。。。但是(a)你没有迭代,(b)你从哪里读取文件名(getc读取下一个字符…)和(c)你有什么实际问题…你有问题吗?getc返回一个字符(字母)。您需要从文件中读取整个单词,并将其传递给strcmp。。。但是(a)你没有迭代,(b)你从哪里读取文件名(getc读取下一个字符…)和(c)你有什么实际问题…我的问题是我想输入一个名称,然后检查名称是否在文件中。如果文件中有姓名,则应记录员工的详细信息displayed@Talra你需要把我的答案和马里奥的答案混在一起。循环遍历每个用户并将其读入。然后,以字符串形式读入用户输入(例如,
char search[90];if(fgets(search,90,stdin)!=NULL){/*compare*/}
),并使用strcmp
比较字符串。我的问题是,我想输入一个名称,然后检查该名称是否在文件中。如果文件中有姓名,则应记录员工的详细信息displayed@Talra你需要把我的答案和马里奥的答案混在一起。循环遍历每个用户并将其读入。然后,以字符串形式读入用户输入(例如,char search[90];if(fgets(search,90,stdin)!=NULL){/*compare*/}
),并使用strcmp
比较字符串。我应该在函数本身还是在main?函数中进行比较。这将允许您读取所有记录(假设您将员工的记录写入了文件),我应该在函数本身还是在main?函数中进行读取。这将允许您读取所有记录(假设您将员工的记录写入该文件)