C打印二维数组

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也未打印。有人能帮我解决这个问

在下面的代码中,我尝试从文件中逐个读取字符,并将每个字符存储在二维数组中。之后,我想打印数组中的每个字符及其坐标(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也未打印。有人能帮我解决这个问题吗?

更改这段代码

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--;
        }
    }
}