我有这段代码,不知道为什么我的输出不正确。我习惯了C ++而不是C。
使用:./ sudoku.o<运行inputfile中
int row = 8;
int col = 8;
int puzzle[row][col];
for (int r = 0; r < row; r++){
for (int c = 0; c < col; c++){
scanf("%d", &puzzle[r][c]);
}
}
for (int r = 0; r < row; r++){
for (int c = 0; c < col; c++){
printf("%d", puzzle[r][c]);
}
printf("\n");
}
这是我的输入
827154396
965327148
341689752
593468271
472513689
618972435
786235914
154796823
239841567
这是我得到的输出
-132765-84896035232594-208491627232765-208491623232765
00-84896120832594-84897084832594-85115713632594
10-848970848325941000
10-8489612083259400-208491648032765
1700966438000-84896035232594-208491641632765
-20846176001-208491643232765-163754450041951850
-1000-85506816832594-84897220032594
0000-20849160083276500
答案 0 :(得分:4)
如评论中所述,您应该检查scanf()
是否成功(在此上下文中,返回1),并且您需要确保它只读取"%1d"
的单个数字。像这样:
#include <stdio.h>
int main(void)
{
int row = 8;
int col = 8;
int puzzle[row][col];
for (int r = 0; r < row; r++)
{
for (int c = 0; c < col; c++)
{
if (scanf("%1d", &puzzle[r][c]) != 1)
{
fprintf(stderr, "Failed to read puzzle[%d][%d]\n", r, c);
return 1;
}
}
}
for (int r = 0; r < row; r++)
{
for (int c = 0; c < col; c++)
{
printf("%d", puzzle[r][c]);
}
printf("\n");
}
return 0;
}
使用您的数据文件,输出是(惊讶,惊讶):
82715439
69653271
48341689
75259346
82714725
13689618
97243578
62359141
&#34;啊&#34;,你说,&#34;我想要每行9个号码&#34;。但是你的代码并没有这么说;您将row
和col
设置为8,因此您只能读取矩阵每行8个数字,而只能读取8行。第一行日期的第九个数字成为矩阵第二行的第一个数字,等等。
将限制更改为9以获得您真正想要的结果:
827154396
965327148
341689752
593468271
472513689
618972435
786235914
154796823
239841567
如果您想要逐行输入(不一定是个坏主意),您需要使用fgets()
(或者可能是POSIX)
getline()
)读取行,然后
sscanf()
阅读数字 - 请参阅How to use sscanf()
in loops?