C打印二维数组
在下面的代码中,我尝试从文件中逐个读取字符,并将每个字符存储在二维数组中。之后,我想打印数组中的每个字符及其坐标(I和j): 我希望结果是这样的:C打印二维数组,c,C,在下面的代码中,我尝试从文件中逐个读取字符,并将每个字符存储在二维数组中。之后,我想打印数组中的每个字符及其坐标(I和j): 我希望结果是这样的: A 0 0 B 0 1 ... 但我得到的真正结果是: A 0 0 B 0 1 C 0 2 D 0 3 E 0 4 1 0 F 1 1 G 1 2 H 1 3 I 1 4 J 2 0 2 1 K 2 2 L 2 3 M 2 4 如您所见,第二行第一行打印有空格,第三行打印的空格相同。此外,最后两个字母N和O也未打印。有人能帮我解决这个问
A 0 0
B 0 1
...
但我得到的真正结果是:
A 0 0
B 0 1
C 0 2
D 0 3
E 0 4
1 0
F 1 1
G 1 2
H 1 3
I 1 4
J 2 0
2 1
K 2 2
L 2 3
M 2 4
如您所见,第二行第一行打印有空格,第三行打印的空格相同。此外,最后两个字母N和O也未打印。有人能帮我解决这个问题吗?更改这段代码
for (int i = 0; i < 3; i++)
{
while (j<5)
{
grid[i][j] = fgetc(file);
j++;
}
j = 0;
}
Fiddling位建议将内部循环更改为for循环(为了可读性)。我同意,但是它有一个缺点,就是必须将j--
放在if语句的else部分,而不需要else语句。您可以查看上面的修复程序以及将内部循环更改为for循环的修复程序,并决定在这种情况下您认为哪一个具有最好的可读性。此代码表示该更改以及初始问题的修复:
for (int i = 0; i < 3; i++)
{
for(int j = 0; j < 5; j++)
{
char c = fegetc(file);
if(c != '\n')
{
grid[i][j] = fgetc(file);
} else {
j--;
}
}
}
for(int i=0;i<3;i++)
{
对于(int j=0;j<5;j++)
{
char c=fegetc(文件);
如果(c!='\n')
{
网格[i][j]=fgetc(文件);
}否则{
j--;
}
}
}
更改此代码位
for (int i = 0; i < 3; i++)
{
while (j<5)
{
grid[i][j] = fgetc(file);
j++;
}
j = 0;
}
Fiddling位建议将内部循环更改为for循环(为了可读性)。我同意,但是它有一个缺点,就是必须将j--
放在if语句的else部分,而不需要else语句。您可以查看上面的修复程序以及将内部循环更改为for循环的修复程序,并决定在这种情况下您认为哪一个具有最好的可读性。此代码表示该更改以及初始问题的修复:
for (int i = 0; i < 3; i++)
{
for(int j = 0; j < 5; j++)
{
char c = fegetc(file);
if(c != '\n')
{
grid[i][j] = fgetc(file);
} else {
j--;
}
}
}
for(int i=0;i<3;i++)
{
对于(int j=0;j<5;j++)
{
char c=fegetc(文件);
如果(c!='\n')
{
网格[i][j]=fgetc(文件);
}否则{
j--;
}
}
}
尝试添加另一个fgetc(文件);在j=0之后;
(无任何转让)。
它将从您的文件中提取新行字符尝试添加另一个fgetc(文件);在j=0之后;
(无任何转让)。
它将从文件中提取新行字符您正在读取两个
\n
作为字符,这会将字符
数组的最后两个元素推出。将文件内容更改为ABCDEFGHIJKLMNO
,它应该可以正常工作。您正在读取两个\n
作为字符,这会将字符
数组的最后两个元素推出。将文件内容更改为ABCDEFGHIJKLMNO
,它应该可以正常工作。使用for
循环而不是while
循环也会更干净。@FiddlingBits我同意。我将编辑代码来表示这一点。谢谢你的建议。使用for
循环而不是while
循环也会更干净。@FiddlingBits我同意。我将编辑代码来表示这一点。谢谢你的建议。
for (int i = 0; i < 3; i++)
{
for(int j = 0; j < 5; j++)
{
char c = fegetc(file);
if(c != '\n')
{
grid[i][j] = fgetc(file);
} else {
j--;
}
}
}