我创建了一个文件B12,其中包含一些字符,我想将该文件存储在2d数组中,然后将其打印出来,但是我的代码没有给我正确的输出。
我使用此代码进行了尝试,但无济于事
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ar[9][9];
int i,j;
FILE *fp;
fp=fopen("B12.txt","r");
if(fp==NULL)
printf("File not Found");
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
fscanf(fp," %c",&ar[i][j]);
}
}
for(i=0; i<9; i++)
{
for(j=0; j<8; j++)
{
printf("%c",ar[i][j]);
}
printf("\n");
}
return 0;
}
上面代码的输出是
applemas
obnanaoa
qamalikg
rlpoppqf
elpaaprv
langolne
oagtqamv
okgqplpm
cwfaalpa
但是文件包含以下需要打印的字符,
applemasgo
bnanaoatqa
malikgqrlp
oppqfaelpa
aprvelango
lnenoagtqa
mvlokgqplp
mpcwfaalpa
ghbnnmlspq
oppomobile
答案 0 :(得分:0)
目前尚不清楚您想要什么,但是如果要读取,存储和打印不同大小的文件,则使用可变长度数组是一种选择。
读取文件以计算行数和最大列数。
声明可变长度数组。如果存在具有不同列的行,请初始化数组。
倒带文件并将字符存储在数组中。
#include <stdio.h>
#include <stdlib.h>
int main ( void) {
int row = 0;
int col = 0;
int line = 0;
int each = 0;
int ch = 0;
FILE *fp = NULL;;
fp = fopen ( "B12.txt", "r");
if ( fp == NULL) {
fprintf ( stderr, "File not Found\n");
return 0;
}
while ( EOF != ( ch = fgetc ( fp))) {//read a character into ch
if ( '\n' == ch) {//found a newline
row++;//count rows
each = 0;
continue;
}
each++;//count characters
if ( each > col) {
col = each;//store maximum col
}
}
rewind ( fp);//go back to start of file
char arr[row][col];//variable length array
for ( line = 0; line < row; ++line) {
for ( each = 0; each < col; ++each) {
arr[line][each] = 0;//set all to 0
}
}
line = 0;
each = 0;
while ( EOF != ( ch = fgetc ( fp))) {//read a character into ch
if ( '\n' == ch) {//found a newline
line++;//next line
each = 0;//first character
continue;//do not store the newline
}
arr[line][each] = ch;//save ch into arr
each++;//next character
}
fclose ( fp);
for ( line = 0; line < row; ++line) {
for ( each = 0; each < col; ++each) {
if ( arr[line][each]) {//not 0
fputc ( arr[line][each], stdout);
}
}
fputc ( '\n', stdout);
}
return 0;
}
另一个选择是使用malloc
分配内存,而不是使用可变长度数组。这还将允许在仅读取文件一次的同时进行读取和分配。可能会允许处理更大的文件。