gpt4 book ai didi

字符数组比较和 while 循环在 C 中无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:31 25 4
gpt4 key购买 nike

我有一个名为 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);
}

文本文件包含以下内容:

E0001de Guzman, Franz Miguel C.         
E0002de Guzman, Fernan Ralph C.

每行 40 个字符,包括空格。问题是:

  1. while 循环 4 次。(应该只循环两次,因为只有 2 条记录要遍历。)
  2. 程序在 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 应该会产生您正在寻找的结果,假设 idempID 数组足够大,可以存储您正在读取的文本。

请记住,strcmpstrcpystrlenprintf 等字符串例程期望以 null 结尾字符串作为输入。因此,您必须确保用于该目的的每个 char 数组都足够大以存储输入文本以及一个额外的 \0 字符。

关于字符数组比较和 while 循环在 C 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25951302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com