这个问题已经在这里有一个答案:
我有以下的代码,我似乎无法找出为什么我的IF子句不是while循环中工作。否则,我能够从文本文件中提取的记录。看来,当我从文字比较没有对获取的价值搜索价值发生。我试图通过包含在文件中的条件,只打印出的记录。
/*
* File: main.c
* Author:
*
* Created on 06 February 2019, 10:27
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
/*
*
*/
struct employee
{
char Name[100];
char Emp_ID[10];
char Sex[10];
char Department[50];
};
int main(int argc, char** argv) {
FILE *fp;
clearScreen();
struct employee emp;
fp=fopen("C:\\Users\\vdimitrov\\Documents\\NetBeansProjects\\KevinEngineering\\build\\Debug\\Cygwin-Windows\\employee.txt","r");
if (!fp) {
printf("Unable to open file!");
return -1;
}
printf("Display Employee Data Report");
while (fread(&emp,sizeof(struct employee),1,fp) != NULL) {
if(emp.Name == "Something contained in Name"){
printf("\n");
printf("\nName: %s\n", emp.Name);
printf("Emp_ID: %s\n", emp.Emp_ID);
printf("Sex: %s\n", emp.Sex);
printf("Department: %s\n", emp.Department);
}
}
printf("\nEnd Of Report\n");
fclose(fp);
return 0;
}
void clearScreen()
{
system("@cls||clear");
}
在C语言中,你不比较==
字符串:
if (emp.Name == "Something contained in Name")
该strcmp
功能是您所需要的平等检查。但是,如果(似乎是这样),你想部分匹配(如找含Smith
任何名称),你需要在string.h
定义的其它一些功能。
我建议寻找到strstr
,例如,一个搜索字符串,看它是否包含另一个字符串。
在C语言中,你不能比较数组(包括字符串,这是char
阵列)与==
运营商。 (或者说,你可以,但如果它们驻留在内存中的同一个地方,而不是是否他们的内容是相同的它检查。)
如果你想进行比较的另一个阵列,标准的方法是使用memcmp
,其中比较存储器的两个原始块。字符串的替代方案是strcmp
,其停止当它找到一个空字节进行比较。这两个函数返回0
如果数组是一样的,所以你会想:
if(strcmp(emp.Name, "my string here") == 0)
(另外,你的文件读取代码可能是错误的:你读原始字节,而不是文本,但我不知道实际的要求,所以我不知道如何解决这个问题。)