[英]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.