使用C来阅读文本文件的问题[复制]

问题描述 投票:-2回答:3

这个问题已经在这里有一个答案:

我有以下的代码,我似乎无法找出为什么我的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 io fread
3个回答
1
投票

首先,如果条件将无法正常工作。你比较指针,不是字符串。在C语言中,它是strcmp

第二,如果你输入的文件是一个文本文件,你要读的字符串,给定大小(员工结构的大小)的不是一个缓冲区。看看fgets


1
投票

在C语言中,你不比较==字符串:

if (emp.Name == "Something contained in Name")

strcmp功能是您所需要的平等检查。但是,如果(似乎是这样),你想部分匹配(如找含Smith任何名称),你需要在string.h定义的其它一些功能。

我建议寻找到strstr,例如,一个搜索字符串,看它是否包含另一个字符串。


1
投票

在C语言中,你不能比较数组(包括字符串,这是char阵列)与==运营商。 (或者说,你可以,但如果它们驻留在内存中的同一个地方,而不是是否他们的内容是相同的它检查。)

如果你想进行比较的另一个阵列,标准的方法是使用memcmp,其中比较存储器的两个原始块。字符串的替代方案是strcmp,其停止当它找到一个空字节进行比较。这两个函数返回0如果数组是一样的,所以你会想:

if(strcmp(emp.Name, "my string here") == 0)

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

© www.soinside.com 2019 - 2024. All rights reserved.