我有一个名为CheckEmployee的函数。它打开一个文本文件,检查用户输入的id是否存在于记录中:
void CheckEmployee()
{
system("CLS");
char empID[5];
printf("Key in Employee ID: ");
scanf("%s", &empID);
FILE *fp = fopen("Employees.txt", "r");
char lineOfText[40];
while (fgets(lineOfText, 40, fp))
{
char id[6];
strncpy(id, lineOfText, 5);
id[5] = 0;
if (id == empID)
{
printf("Hello?");
}
}
fclose(fp);
}
texfile包含以下内容:
E0001de Guzman, Franz Miguel C.
E0002de Guzman, Fernan Ralph C.
每行40个字符包括空白。问题是:
while
循环4次。(应该只有两次,因为只有两条记录要遍历。)- 程序在
if (id == empID)
中存在运行时错误。但当我用if (strcmp(id, empID) == 0)
替换它时,答案是错误的
更新:strcmp
现在正在工作。感谢@barak manos。while
循环4次仍然存在,但我得到了我想要的结果。
首先,char empID[5]
和char id[6]
看起来可能短于您的输入。
其次,表达式id == empID
的值总是false,因为您本质上是在比较两个静态分配的数组的内存地址。
表达式strcmp(id,empID) == 0
应该产生您要查找的结果,假设id
和empID
数组足够大,可以存储您正在读取的文本。
请记住,诸如strcmp
、strcpy
、strlen
、printf
之类的字符串例程期望以null结尾的字符串作为输入。因此,您必须确保用于此目的的每个char
数组都足够大,可以存储输入文本和一个额外的