You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何从文件中使用long long类型整数搜索对应记录

C语言按12位长整型身份证号搜索文件记录解决方案

错误原因

你尝试的if(identityC == line)逻辑不成立,原因是二者类型不匹配:

  • identityC是long long类型的数值变量
  • line是存储整行文本的字符数组,直接写line指代的是数组的首内存地址
    二者直接用==对比是拿输入的身份证数值和文本行的内存地址做比较,完全不符合业务需求。

可选实现方案

有两种常用实现思路,你可以根据你的文件存储格式选择:

  • 方案1:解析文本行中的身份证号转为长整型对比
    如果你的文件每行格式为[12位身份证号] [姓名] [其他预订信息],可以用sscanf从读取到的line中解析出身份证号的长整型值,再和用户输入的identityC对比即可。
  • 方案2:将输入的长整型身份证号转为字符串对比
    你也可以用sprintf把用户输入的long long类型身份证号转成12位的字符串,再用strncmp和行内对应位置的字符串做匹配,这种方式不需要处理数值解析的异常。

修正后的完整代码

#include <stdio.h>
#include <string.h>

int main() {
    char line[255], name[30];
    long long identityC, line_id;
    int search_type; // 1=按身份证搜索 2=按姓名搜索

    FILE* fpointer = fopen("123 Hotel Customer.txt", "r");
    if (fpointer == NULL) {
        printf("文件打开失败,请检查文件路径是否正确");
        return 1;
    }

    printf("请选择搜索方式:1-按身份证号搜索 2-按姓名搜索:");
    scanf("%d", &search_type);

    if (search_type == 1) {
        printf("\n请输入您的12位身份证号:");
        scanf("%lld", &identityC);
        // 采用方案1实现
        while (fgets(line, 255, fpointer) != NULL) {
            // 从行首解析长整型身份证号
            if (sscanf(line, "%lld", &line_id) == 1) {
                if (line_id == identityC) {
                    printf("%s", line);
                }
            }
        }
    } else {
        printf("\n请输入您的姓名以搜索预订记录:");
        scanf("%s", name); // 数组名本身就是地址,不需要加&
        // 修正原有feof逻辑漏洞,避免最后一行重复读取
        while (fgets(line, 255, fpointer) != NULL) {
            if (strncmp(name, line, strlen(name)) == 0)
                printf("%s", line);
        }
    }

    fclose(fpointer);
    return 0;
}

注意事项

  • 原有代码中的while (!feof(fpointer))写法存在逻辑漏洞,会导致最后一行重复读取,替换为while (fgets(line, 255, fpointer) != NULL)即可避免该问题
  • 如果你的文件中身份证号不是放在行首,需要调整sscanf的格式串匹配对应的字段位置
  • 12位数字完全在long long的取值范围内,不需要担心数值溢出问题

内容的提问来源于stack exchange,提问作者Hazim Naufal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 02:48:04