gpt4 book ai didi

C打印二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:12 24 4
gpt4 key购买 nike

在下面的代码中,我试图从一个文件中逐个读取一个字符,并将每个字符存储在一个二维数组中。之后我想打印数组中的每个字符及其坐标(i 和 j):

#include <stdio.h>
#pragma warning(disable:4996)
int main(){

char grid[3][5];
FILE *file;
file = fopen("input.txt", "r");
int c;

if (file == NULL){
perror("Error in reading the file");
}
else{
int j=0;
for (int i = 0; i < 3; i++)
{
while (j<5)
{
grid[i][j] = fgetc(file);
j++;
}
j = 0;
}
}

int length = sizeof grid / sizeof grid[0][0];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%c %d %d \n", grid[i][j], i, j);

}
}
printf("\n");
return 0;
}

我读取的文件如下所示:

ABCDE
FGHIJ
KLMNO

我希望结果是这样的:

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

添加一个 if 语句,该语句将检查以确保它读取的字符不是换行符 \n。完成的代码将如下所示:

for (int i = 0; i < 3; i++)
{
while (j<5)
{
char c = fegetc(file);
if(c != '\n')
{
grid[i][j] = fgetc(file);
j++;
}
}
j = 0;
}

Fiddling Bits 建议将内部循环更改为 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--;
}
}
}

关于C打印二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36163190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com