在C

时间:2019-02-07 07:40:01

标签: c io fread

我有以下代码,而且我似乎找不到为什么我的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");
}

3 个答案:

答案 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)

(另外,您的文件读取代码可能是错误的:您正在读取原始字节而不是文本。但是我不知道实际要求,所以不知道如何解决此问题。)