我有以下代码,而且我似乎找不到为什么我的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");
}
答案 0 :(得分:1)
首先,if条件将不起作用。您比较的是指针,而不是字符串。在C语言中,它是strcmp
第二,如果输入文件是文本文件,则必须读取字符串,而不是给定大小(struct employee大小)的缓冲区。看fgets。
答案 1 :(得分:1)
在C语言中,您不将字符串与==
进行比较:
if (emp.Name == "Something contained in Name")
strcmp
函数是进行相等性检查所需要的。但是,如果(似乎是这样)想要部分匹配(例如查找包含Smith
的任何名称),则需要在string.h
中定义的一些其他函数。
例如,我建议调查strstr
,它搜索一个字符串以查看其是否包含另一个字符串。
答案 2 :(得分:1)
在C中,您无法使用char
运算符比较数组(包括字符串,==
数组)。 (或者,您可以,但是它会检查它们是否位于内存中的同一位置,而不是它们的内容是否相同。)
如果要将一个数组与另一个数组进行比较,则标准方法是使用memcmp
,它比较两个原始内存块。字符串的替代方法是strcmp
,当发现空字节时它将停止比较。如果数组相同,这两个函数都将返回0
,所以您需要:
if(strcmp(emp.Name, "my string here") == 0)
(另外,您的文件读取代码可能是错误的:您正在读取原始字节而不是文本。但是我不知道实际要求,所以不知道如何解决此问题。)