将文本文件读入C中的2D数组

0 c arrays parsing file

我有一个大小为8乘12(8行,12列)(x,y)的文本文件

abcdefghjikl
123456789abc
aerereghjikl
123456789abc
abc43434dfdf
12erere789ab
abcdefghjikl
12345fdfd89a
Run Code Online (Sandbox Code Playgroud)

我正在尝试将每个单独的字符读入2d数组,其中第一个维度是行,第二个维度是列.

这就是我尝试过的:

int main(void) {
    FILE * fp;
    fp = fopen("test.txt","r");

    char points[8][12];
    int i,j;

    for(i=0; i<8; i++) {
        for(j=0; j<12; j++) {
            fscanf(fp,"%c",&points[i][j]);
        }
    }

    for(i=0; i<8; i++) {
        for(j=0; j<12; j++) {
            printf("%c",points[i][j]);
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是我的输出似乎正常工作,直到文件的最后一行.

abcdefghjikl
123456789abc
aerereghjikl
123456789abc
abc43434dfdf
12erere789ab
abcdefghjikl
12345
Run Code Online (Sandbox Code Playgroud)

最后一行没有完全奏效的地方.我已经尝试增加行的数组维度,这会使最后一行出现,但会向我的输出添加垃圾值.任何帮助将非常感激.

Sto*_*ica 6

顾名思义,换行符也是字符.你应该发现你的输出保留换行符是可疑的.

实际上文件的每一行有13个字符(假设是unix系统).十二个可打印的,换行.

因此,对于i = 1 ... 7,每个"行"中的第一个字符是换行符.

幸运的是,scanf可以指示在等待字符输入时跳过空格字符.只需在格式说明符字符串的开头添加一个空格:

fscanf(fp, " %c", &points[i][j]);
Run Code Online (Sandbox Code Playgroud)