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

C程序问题:无法正确打印目标字符串在文本文件中的行号

问题分析与修复方案

首先看你的代码,行号统计错误主要是因为行号逻辑、文件读取方式以及变量初始化/重置这几个地方出了问题,我帮你拆解一下问题点,再给出修复后的代码:

主要问题点

  • 未正确识别行边界:你用fscanf("%s", string)读取单词,它会跳过所有空白字符(包括换行),根本没法区分不同的行;而且变量chr完全没被赋值,if (chr == '\n')这个判断完全无效。
  • 行号未重置:每次查询新字符串时,line_number没有重置为1,导致第二次及以后的查询会累加之前的行号,结果自然不对。
  • 输入逻辑顺序颠倒:循环一开始就打开文件,此时student初始是全0值,会直接进入查询逻辑,然后才提示输入,流程完全反了。
  • 字符串匹配逻辑混乱:strstr(string, student) == 0的判断写反了,还和无效的换行判断混在一起,完全达不到匹配目标字符串的效果。

修复后的代码

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

int main() {
    char student[100] = {0};
    char line[100]; // 存储读取的整行内容
    FILE *in_file;

    // 先提示输入,再判断是否退出
    printf("please enter a word (enter '0' to exit)\n");
    scanf("%s", student);
    
    while (strcmp(student, "0") != 0) {
        int line_number = 1;
        int found_flag = 0; // 标记是否找到目标字符串

        in_file = fopen("student.txt", "r");
        if (in_file == NULL) {
            printf("Error file missing\n");
            exit(1);
        }

        // 用fgets读取整行,准确识别行边界
        while (fgets(line, sizeof(line), in_file) != NULL) {
            // 检查当前行是否包含目标字符串
            if (strstr(line, student) != NULL) {
                printf("Found at line number: %d\n", line_number);
                found_flag = 1;
            }
            line_number++; // 每读取一行,行号自增
        }

        if (!found_flag) {
            printf("The word '%s' was not found in the file.\n", student);
        }

        fclose(in_file);

        // 准备下一次输入
        printf("\nplease enter a word (enter '0' to exit)\n");
        scanf("%s", student);
    }

    return 0;
}

修复说明

  1. 改用fgets读取整行:fgets会完整读取一行内容(包括换行符),这样就能准确统计行号,每读取一行就把line_number加1。
  2. 每次查询重置行号:把line_number放在循环内部定义,这样每次查询新字符串时,行号都会从1开始计数。
  3. 修正输入逻辑:先让用户输入字符串,再判断是否退出,避免初始空值进入查询的问题;同时用strcmp判断是否输入"0",比直接判断student[0]更严谨(比如输入"00"不会误判为退出)。
  4. 添加未找到提示:如果目标字符串没出现在文件里,会给出明确提示,交互更友好。
  5. 精简无效变量:删掉了没用的chr和num变量,让代码更简洁。

你可以试试这个版本,应该能正确输出目标字符串所在的行号了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:12:50