繁体   English   中英

读取.pgm图像文件的标题

[英]read the header of a .pgm image file

我正在尝试从.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);
}

首先,我建议您做一个小测试:例如,将变量初始化为0,并在读取操作后验证变量保持什么值。

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

您看到此现象的发生是因为fscanf()和派生文件在扫描时会匹配完整模式,这意味着如果源数据中没有逗号,而格式中有逗号,则可能会忽略它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM