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

如何打印文件中空格与换行符的位置?代码无输出问题排查

问题分析与修复方案

你的代码无输出主要源于几个关键问题,下面逐一拆解并给出修复方案:

1. 未初始化的file2指针导致程序直接退出

你声明了FILE *file2但从未对其赋值或打开文件,因此file2始终为NULL,触发if(file==NULL || file2==NULL)判断,程序直接打印Error后退出。若你没看到该输出,可能是输出缓冲或环境显示问题,但这是首要解决的bug——直接删除file2相关的无用代码即可。

2. fscanf("%s")无法读取空格和换行符

%s格式符会自动跳过所有空白字符(空格、换行、制表符等),仅读取到下一个空白字符为止,因此str变量中永远不会包含空格或换行符,自然无法检测到它们。需改用逐字符读取的方式,比如fgetc()。

3. 换行符写法错误

你写成了'/n',正确的转义换行符应为'\n'(反斜杠)。

修复后的代码

以下是修正后的代码,可逐字符读取文件并记录空格和换行符在文件中的绝对位置:

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

#define N 100

int main() {
    FILE *file = fopen("file", "r");
    if (file == NULL) {
        printf("Error opening file\n");
        exit(1);
    }

    int positions[50];
    int pos_count = 0;
    int current_pos = 0;
    int c;

    // 逐字符读取文件,不跳过任何空白
    while ((c = fgetc(file)) != EOF) {
        current_pos++;
        if (c == ' ' || c == '\n') {
            if (pos_count < 50) { // 防止数组越界
                positions[pos_count++] = current_pos;
            }
        }
    }

    // 输出记录的位置
    for (int i = 0; i < pos_count; i++) {
        printf("%d ", positions[i]);
    }
    printf("\n");

    fclose(file); // 记得关闭文件
    return 0;
}

代码说明

  • 使用fgetc()逐字符读取,能准确捕获所有空白字符,不会跳过任何内容。
  • current_pos记录每个字符在文件中的绝对位置(从1开始计数,可自行改为从0开始)。
  • 增加数组越界检查,避免positions数组溢出。
  • 移除了无用的变量和头文件(如string.h、ctype.h在此功能中无需使用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:23:08