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

如何从TXT文件中输出包含空格的完整语句?

解决读取文件时空格被识别为分隔符的问题

问题根源

你当前用的fscanf("%s", line)里,%s格式说明符默认会把空白字符(空格、换行、制表符)当作读取结束的标记,所以每行里的空格会被当成内容分割点,导致"hello world"这类带空格的内容被拆成两行输出。另外代码还有两个小问题:

  1. Windows路径中的反斜杠没转义——C语言字符串里的\是转义字符,必须写成\\,否则编译器会把\U、\E等当成特殊转义序列,导致路径无效;
  2. 末尾的fclose(fwrite)无效,你没定义fwrite这个文件指针,会引发编译错误。

解决方案一:用fgets读取整行(推荐)

fgets可以直接读取一整行内容(包括空格和换行符),直到碰到换行符或缓冲区填满,是读取整行文本的标准方法。修改后的代码如下:

#include <stdio.h>

int main(void) {
    // 路径反斜杠转义为双反斜杠
    FILE* fread = fopen("C:\\Users\\EXAMPLE\\desktop\\input.txt", "r");

    if (fread == NULL) {
        printf("无法打开文件!\n");
        return -1;
    }

    char line[1000] = "";
    // fgets会保留换行符,因此printf不用额外加\n
    while (fgets(line, sizeof(line), fread) != NULL) {
        printf("%s", line);
    }

    fclose(fread);
    // 删除无效的fclose(fwrite)
    return 0;
}

解决方案二:修改fscanf的格式说明符

如果一定要用fscanf,可以通过%[^\n]指定读取到换行符为止,同时要手动处理缓冲区里的换行符:

#include <stdio.h>

int main(void) {
    FILE* fread = fopen("C:\\Users\\EXAMPLE\\desktop\\input.txt", "r");

    if (fread == NULL) {
        printf("无法打开文件!\n");
        return -1;
    }

    char line[1000] = "";
    // %[^\n] 读取所有非换行符的字符,实现整行读取
    while (fscanf(fread, "%[^\n]", line) == 1) {
        printf("%s\n", line);
        // 读取并丢弃缓冲区中的换行符,避免影响下一次读取
        fgetc(fread);
    }

    fclose(fread);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:55:40