[英]Char array comparing and while loop not working properly in C
我有一个名为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次(由于只有2条记录要遍历所以应该只循环两次)。 if (id == empID)
存在运行时错误。 但是当我将它替换为if (strcmp(id, empID) == 0)
,答案为假。 更新 : strcmp
现在正在工作。 感谢@barak manos。 while
循环4次仍然持续,但是我得到了想要的结果。
首先, char empID[5]
和char id[6]
看起来可疑地短于您的输入。
其次,表达式id == empID
值始终为false,因为您实际上是在比较两个静态分配的数组的内存地址。
假设 id
和empID
数组足够大,可以存储正在阅读的文本,则表达式strcmp(id,empID) == 0
产生您要查找的结果。
请记住,字符串例程(例如strcmp
, strcpy
, strlen
, printf
期望以空终止的字符串作为输入。 因此,您必须确保用于此目的的每个char
数组都足够大以存储输入文本以及一个附加的\\0
字符。
您必须使用strcmp()
比较字符串。 您正在比较两个变量是否具有相同的地址-却没有。
请注意, empID
的长度不足以容纳带有空终止符的E0001
。 您应该在阵列大小上保持一致。 该行的字符串长度40也非常小。 我可能会使用4096作为行大小,并抱怨显示的行实际上是否长于39或40。使用fgets(lineOfText, sizeof(lineOfText), fp)
和sizeof
来指定数组也是一个好主意尺寸。 这意味着,如果要更改数组的大小,则只需更改一行代码,这就是数组的声明。
你应该这样做:
while (fgets(lineOfText, 40, fp))
{
char id[6];
strncpy(id, lineOfText, 5);
id[5] ='\0'; // add null to end of id.
if (strcmp(id,empID)==0) // here compare string
{
printf("Hello?");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.