gpt4 book ai didi

c - fgets 在循环中重复二维数组中的数据

转载 作者:行者123 更新时间:2023-12-04 10:24:10 28 4
gpt4 key购买 nike

我试图从文件中获取我的 9x9 数字网格并将其存储在 2D int 数组中。为此,我编写了代码,以便它使用文件中的 fgets(),然后将 char 数组值转换为 int,然后将其存储在数组中的相应位置。

虽然我认为它可以工作,但当我打印出数组时,我注意到它有重复的值(来自它读取的前一行)并且它没有打印出完整的 9x9 网格。这就是我的意思:

 int strIndex = 1; // Goes every odd to extract number

/* Need to do this for the whole grid */
for(int i = 0; i < 9; i++) {
fgets(str,19, f);
strIndex = 1;
// printf("%s\n", str);
for(int j = 0; j < 9; j++) {
// Since asci digits start at 48, subtracting gets you the num
grid[i][j] = (int) str[strIndex] - 48;
strIndex = strIndex + 2;
}
}


这就是我应该得到的(基本上是 input.txt 中的任何内容):
 8 2 7 1 5 4 3 9 6 
9 6 5 3 2 7 1 4 8
3 4 1 6 8 9 7 5 2
5 9 3 4 6 8 2 7 1
4 7 2 5 1 3 6 8 9
6 1 8 9 7 2 4 3 5
7 8 6 2 3 5 9 1 4
1 5 4 7 9 6 8 2 3
2 3 9 8 4 1 5 6 7

但这就是我得到的:
8 2 7 1 5 4 3 9 6 

-38 2 7 1 5 4 3 9 6

9 6 5 3 2 7 1 4 8

-38 6 5 3 2 7 1 4 8

3 4 1 6 8 9 7 5 2

-38 4 1 6 8 9 7 5 2

5 9 3 4 6 8 2 7 1

-38 9 3 4 6 8 2 7 1

4 7 2 5 1 3 6 8 9

我正确使用 fgets() 吗?什么是-38?我似乎无法理解为什么要打印它而不是实际数字。 (例如:而不是 grid[0][0] 中的 8 ,它在 grid[0][1] 中打印 -38 。在 fgets 中,我将空间设为 19 ,因为我注意到 fgets() 也是如此,所以我的空格中的每一个 104 都增加了 104 个,所以为什么 104 是

谢谢

最佳答案

fgets(str,19, f)

那不会读取整行。您的线路有 19 可见 字符,但每行末尾有一个换行符 ( \n )。通过仅读取 19 个字符,您将换行用于下一个 fgets .因此每一秒 fgets call 将读取一个换行符,并保留前一行的缓冲区的其余部分。换行符 ascii 值为 10这就是 -38来自,因为代码确实 str[strIndex] - 48 .

所以修复方法是阅读 20字符而不是 19 .事实上,放置更大的缓冲区也无妨。说 32字节。 fgets无论如何都会停在换行符处。

关于c - fgets 在循环中重复二维数组中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60700451/

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