我试图读取一个pgm文件,并将其放入一个数组中进行赋值,然后将其放到可以将每一行放入一个字符串中的位置,然后尝试对每一行进行sscanf以获取值,但无论实际是什么,它总是将num的值置为零。这可能与pgm文件在每列之间有1或2个空格有关,但我不确定`
int **image = (int**) malloc(*numCols * sizeof(int*));
int i;
for(i = 0; i < *numCols; i++)
{
image[i] = (int *) malloc(*numRows * sizeof(int));
}
int r,c;
int num = 0;
char *line = (char *) malloc(*numCols * sizeof(char));
for(r = 0; r < *numRows; r++)
{
int number = (*numCols * sizeof(int));
fgets(line, number, in);
for(c = 0; c < *numCols; c++)
{
sscanf(line,"%d",&num);
printf("%d",num);
image[r][c] = num;
}
sscanf(line,"%*[\n]");
printf("\n");
}
return image;
最佳答案
PGM file不是以数字开头的,请使用文本编辑器打开文件以查找其格式。另一个问题是,如果您像那样使用sscanf()
,您将只永久读取第一个数字,也许您需要strtok()
,或者像这样:
int offset = 0, readCount;
for(c = 0; c < *numCols; c++)
{
sscanf(line + offset,"%d%n",&num, &readCount);
printf("%d",num);
image[r][c] = num;
offset += readCount;
}
关于c - 读取pgm文件时C sscanf()返回零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22264495/