我无法将文本文件中的字母加载到2D数组中。
我的代码如下;;
#include <stdio.h>
int main() {
int i, j, a, b;
char c;
char f, filename[100];
char match[i][j];
FILE *fp;
fp = fopen(filename, "r");
for (a = 0; a < i; a++) {
for (b = 0; b < j; b++) {
match[i][j] = '.';
}
}
while ((c = fgetc(fp)) != EOF) {
for (a = 0; a < i; a++) {
for (b = 0; b < j; b++)
if ((c != '\n') && (c != '\r'))
match[a][b] = c;
}
}
for (a = 0; a < i; a++) {
for (b = 0; b < j; b++)
printf("%c", match[a][b]);
printf("\n");
}
return 0;
}
和文本文件包含如下字母:
AAAAA\nBBBBB\nCCCCC\nDDDDD\nEEEEF\n
我想加载文本文件到程序完全相同,但它只显示结果
喜欢:
FFFFF\nFFFFF\nFFFFF\nFFFFF\nFFFFF\n
答案 0 :(得分:2)
char match[i][j]
这给出了编译错误,使用常量scanf("%d%d%s", &i,&j,&filename);
此处代替&amp; filename写入文件名,因为数组名称是数组的地址,不需要&
"c:\\documents\\filename.txt"
注意\或使用可以将其写为"c:/documents/filename.txt"
答案 1 :(得分:1)
正如Ahmed所说,你从未在显示的代码中初始化i,j和filename。
假设你这样做(使用你的输入,我假设i = 5,j = 5),你首先将所有match
数组初始化为.
:ok。
然后你逐个字符地阅读你的文件,并且控制它与&#39; \ n&#39;和\r
。让我们来看看最后一个单词的最后一个字符发生了什么,即F
。你在完整数组上循环(a [0; i [,b in [0; j [),如果字符,如果\r
,\n
(不是)你影响它匹配[i,j]
for (a = 0; a < i; a++) {
for (b = 0; b < j; b++)
if ((c != '\n') && (c != '\r'))
match[a][b] = c;
}
所以在循环结束时,匹配只包含F
,这解释了当前的输出......
您还有另一个问题,即影响char c = fgetc(fp)
,并将其与EOF进行比较。这很危险,因为fgetc()
和EOF都被声明为int
。
fgetc
循环应位于最内部位置才能正常工作,只能跳过&#39; \ n&#39;和\r
:
int c;
...
for (a = 0; a < i; a++) {
for (b = 0; b < j; b++)
while(((c = fgetc(fp)) != EOF) && ((c == '\n') || (c == '\r'))) /* skip eol /*
if (c != EOF)
match[a][b] = c;
}
这应该足以解决当前的错误,但无论如何一般的程序组织都很糟糕。如果您是初学者,请将编码前的编码写为伪代码。在算法和结构良好之前,代码会很糟糕......