我正在尝试通过stdin
读取包含整数的文本文件,并将值存储在9x9数组中(请注意,该文件必须通过stdin
而不是作为arg读取)< / p>
这就是我所拥有的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
int puzzle[9][9];
int i,j,count=0;
char value[81];
for( i = 0; i < 9; i++ ) {
for( j = 0; j < 9; j++ ) {
scanf("%c", &value[count]);
puzzle[i][j] = value[count] - '0';
count++;
}
}
}
但它似乎没有将scanf
中的ASCII字符转换为int,这就是我认为value[count] - '0'
应该做的事情,所以我最终得到这样的值:
-16-16-160-16-160-16-161
基本上我正在尝试完成这个帖子中描述的内容,但是在C而不是C ++:
How to convert a 2d char array to a 2d int array?
修改
输入文件如下所示(包含空格和新行):
0 0 1 9 0 0 0 0 8
6 0 0 0 8 5 0 3 0
0 0 7 0 6 0 1 0 0
0 3 4 0 9 0 0 0 0
0 0 0 5 0 4 0 0 0
0 0 0 0 1 0 4 2 0
0 0 5 0 7 0 9 0 0
0 1 0 8 6 0 0 0 7
7 0 0 0 0 9 2 0 0
答案 0 :(得分:2)
问题不在于转换行puzzle[i][j] = value[count] - '0';
。问题在于以下scanf()
语句scanf("%c", &value[count]);
。 scanf正在读取第一个空白区域。使用scanf(" %c", &value[count]);
读取输入。
答案 1 :(得分:2)
%c
完全应该做什么:它会读取一个字符。噢,这是空白吗?那没关系。这就是为什么......
...您不应该使用%c
而是%d
来扫描整数;
...你不应该使用scanf()
这样简单的东西。
如果我是你,我会怎么做:
int matrix[9][9];
int i = 0;
char buf[0x100];
while (fgets(buf, sizeof(buf), stdin)) {
char *end;
char *p = strtok_r(buf, " ", &end);
while (p) {
matrix[i / 9][i % 9] = strtol(p, NULL, 10);
i++;
p = strtok_r(NULL, " ", &end);
}
}
答案 2 :(得分:0)
有什么理由不起作用吗?以整数扫描它们。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
int puzzle[9][9];
int i,j,count=0;
char value[81];
for( i = 0; i < 9; i++ ) {
for( j = 0; j < 9; j++ ) {
scanf("%d", &value[count]);
puzzle[i][j] = value[count];
printf("%d", puzzle[i][j]); //to verify it is stored correctly
count++;
}
}
}
编辑:既然你说它来自一个文件,我把你提供的样本文件复制/粘贴到C:\ file.txt中,以下代码似乎只是花花公子。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
FILE *fp;
int puzzle[9][9];
int i,j,count=0;
int value[81];
fp = fopen("C:\\file.txt", "r");
for( i = 0; i < 9; i++ ) {
for( j = 0; j < 9; j++ ) {
fscanf(fp, " %d", &value[count]);
puzzle[i][j] = value[count];
printf("element %d is %d\n",count, puzzle[i][j]);
count++;
}
}
}
答案 3 :(得分:-1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
//I relized that my solution need an other way of declaration and allocation
//int puzzle[9][9];
int *puzzle= (int*)malloc(9*9*sizeof(int));
int i,j;
for( i = 0; i < 9; i++ ) {
for( j = 0; j < 9; j++ ) {
scanf("%d", puzzle+9*i+j)
}
}
}