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

C语言中忽略转义序列:读取N×N整数矩阵并合并为单字符串

问题描述

需要读取一个N×N的整数矩阵,将其以字符序列形式存入字符数组处理。要求矩阵一次性从标准输入传入(比如从TXT文件复制内容),忽略转义字符(如\n),将所有N×N整数合并为单个以空格分隔的字符串,输入以回车键结束。

尝试使用gets函数时,遇到\n就停止读取,无法获取完整矩阵;改用fgets实现的代码也未达到预期效果。相关示例如下:

目标效果示例

char buff[512];
gets(buff);
/*输入矩阵
1 2 9 10 25
4 3 8 11 24
5 6 7 12 23
16 15 13 14 22
17 18 19 20 21*/
printf("%s", buff);
/*预期输出与输入矩阵一致,合并为无换行的空格分隔字符串*/

初始代码及问题

int main(){
int size;
printf("enter size of matrix >> ");
scanf("%d",&size);

int matrix[size][size];
char allNumbers[size][512];
for (int i = 0; i < size; i++){
    fgets(allNumbers[i], 511, stdin);
}
printf("%s", allNumbers[2]);
return 0;
}

输入内容(含转义符示意):1 2 9 10 25\n 4 3 8 11 24\n 5 6 7 12 23\n 16 15 13 14 22\n 17 18 19 20 21\0
实际输出仅为第一行内容:1 2 9 10 25,无法合并所有行。

问题原因分析
  1. 输入缓冲区残留问题:scanf("%d", &size)读取矩阵大小后,输入缓冲区中会留下换行符,第一个fgets会直接读取这个换行符,导致allNumbers[0]为空字符串,后续读取的行整体错位。
  2. 未处理换行符合并:fgets按行读取内容,本身会保留换行符,且初始代码没有将多行内容合并为单个字符串,自然无法得到预期的无换行结果。
解决方案代码
#include <stdio.h>
#include <string.h>

int main() {
    int size;
    printf("输入矩阵大小 >> ");
    // 读取矩阵大小并清除缓冲区残留的换行符
    scanf("%d", &size);
    getchar();

    // 定义足够大的缓冲区存储合并后的字符串
    char merged_str[1024] = {0};
    char line_buf[512];

    // 循环读取每一行输入,直到遇到空行(用户回车结束输入)
    while (fgets(line_buf, sizeof(line_buf), stdin) != NULL) {
        // 移除行尾的换行符
        line_buf[strcspn(line_buf, "\n")] = '\0';
        
        // 空行表示输入结束,退出循环
        if (strlen(line_buf) == 0) {
            break;
        }

        // 将当前行内容追加到合并缓冲区
        strcat(merged_str, line_buf);
        strcat(merged_str, " ");
    }

    // 移除最后多余的空格
    if (strlen(merged_str) > 0) {
        merged_str[strlen(merged_str) - 1] = '\0';
    }

    printf("合并后的结果:\n%s\n", merged_str);
    return 0;
}
代码说明
  • 处理缓冲区残留:用getchar()清除scanf留下的换行符,确保后续fgets能正确读取矩阵内容。
  • 逐行读取并合并:循环读取每一行,先移除行尾的换行符,再将行内容追加到合并缓冲区,同时用空格分隔。
  • 终止条件:当读取到空行时,判定输入结束,停止读取。
  • 清理多余空格:最后移除合并字符串末尾多余的空格,保证输出格式整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:50:25