1

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

1 回答 1

2

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

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

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

于 2013-09-07T03:08:37.200 回答