读取.pgm图像文件的标题

时间:2013-09-07 03:03:26

标签: c format scanf

我试图从.pgm图像文件(mars.pgm)的标题中读取大小值,并使用sscanf将结果值分配给整数变量u和v。

执行程序时,程序在第一行打印P5 832 700 127,这是正确的(832和700是我要挑选的大小值)。

在用于打印u和v变量的第二行中,打印两个非常大的数字,而不是832和700值。

我无法弄清楚为什么这不能按预期工作。当使用小测试程序(位于帖子的底部)时,sscanf从字符串中挑选出我预期的值。

#include<stdio.h>
#include <string.h>

int main()
{
FILE *fin;
fin= fopen ("mars.pgm","r+");
if (fin == NULL)
{
printf ("ERROR");
fclose(fin);
}


int u,v,i,d,c;
char test[20];

for (i=0; i<=20; i++)
{
test[i]=getc(fin);  
}

sscanf(test,"%d,%d,%d,%d",&c,&u,&v,&d);

printf("%s\n",test);

printf("%d  %d",u, v);


fclose(fin);
}

小测试计划

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{
int a;
char s[3];
s[0]='1';
s[1]=' ';
s[2]='2';

sscanf(s,"%d",&a);
printf("%d",a);
}

1 个答案:

答案 0 :(得分:2)

首先,我建议你做一个小测试:例如,用0初始化你的变量,并验证它们在读操作后保持的值。

然后,尝试从格式字符串中删除,个字符。检查它是否有效。

您看到的这种情况正在发生,因为fscanf()和衍生产品在扫描时与完整模式匹配,这意味着如果您的源数据没有逗号且您的格式有逗号,则可能会被忽略。