Tôi có một tệp có tên input1.txt là một ma trận bao gồm các số và một số chữ cái. Tôi đang cố đọc nó và lưu trữ nó trong mảng 2D để mỗi ký tự là 1 ô. Đây là tập tin văn bản của tôi:
1111S11110
0000010001
110100010d
t001111110
0100000001
0111111101
1111111101
00000D01T1
0111110001
0000E01110
Đây là mã của tôi:
#include
#include
#include
// Hàm tìm độ dài mảng
int numOfLines(FILE *const mazeFile){
int c, đếm;
đếm = 0;
vì( ;; ){
c = fgetc(mazeFile);
if( c == EOF || c == '\n' )
phá vỡ;
++ đếm;
}
số lần trả lại;
}
// Chức năng chính
int main(int argc, char **argv)
{
// Mở tệp ma trận
TẬP TIN *mazeFile;
mazeFile = fopen( "input1.txt", "r" );
nếu( mazeFile == NULL )
return 1;
int ma trậnSize = numOfLines( mazeFile );
// Đọc file văn bản thành mảng 2D
int i,j;
char mazeArray [kích thước ma trận] [kích thước ma trận];
for(i=0;i<>
for(j=0;j<>
fscanf(mazeFile,"%c", &mazeArray[i][j]);
}
}
for(i=0;i<>
for(j=0;j<>
printf("%c",mazeArray[i][j]);
}
}
fclose(mazeFile);
return 0;
}
Tuy nhiên, khi tôi in chúng, đầu ra giao diện điều khiển của tôi trông như thế này:
0000010001
110100010d
t001111110
0100000001
0111111101
1111111101
00000D01T1
0111110001
0000E01110@
Có vẻ như nó không đọc được hàng đầu tiên, nhưng về mặt lập chỉ mục, tôi nghĩ là ổn. Tôi mới đến C. Bất cứ ai có thể giúp đỡ. Cảm ơn trước.
Có một vài câu hỏi ở đây:
số dòng
Lỗi chức năng. Đây là phiên bản đã sửa; nó thực sự đếm số dòng và đặt lại con trỏ tệp về đầu tệp.
Phiên bản của bạn chỉ đếm số ký tự trong dòng đầu tiên (có thể là 10, vì vậy giá trị có vẻ đúng) và nó không đặt lại con trỏ tệp về đầu tệp (vì vậy dòng đầu tiên nằm trong đầu ra của bạn bị mất).
int numOfLines(FILE *mazeFile) { // không có const ở đây BTW !!
int c, đếm;
đếm = 0;
vì (;; ) {
c = fgetc(mazeFile);
nếu (c == EOF)
break; // enf của file => chúng ta thoát
nếu (c == '\n')
++đếm; // cuối dòng => bộ đếm dòng tăng
}
tua lại(mazeFile);
số lần trả về+1;
}
Sau đó, bạn quên hấp thụ \N
tính cách. cái này \N
nằm ở cuối mỗi dòng của tệp nhưng bạn cần phải đọc nó ngay cả khi bạn không muốn lưu trữ nó trong mảng 2D.
for (i = 0; i
for (j = 0; j
fscanf(mazeFile, "%c", &mazeArray[i][j]);
}
char eol; // biến giả
fscanf(mazeFile, "%c", &eol); // đọc \n ký tự
}
Cuối cùng, vì những lý do nêu trên, bạn cần in \N
.
for (i = 0; i
for (j = 0; j
printf("%c", mazeArray[i][j]);
}
putc('\n', thiết bị xuất chuẩn); // in \n
}
Tôi là một lập trình viên xuất sắc, rất giỏi!