我试图从.pgm图像文件(mars.pgm)的头读取大小值,并使用sscanf将结果值赋给整数变量u和v。
当执行时,程序在第一行打印p5832700127,这是正确的(832和700是我要选择的大小值)。
在用于打印u和v变量的第二行中,将打印两个非常大的数字,而不是832和700值。
我搞不懂这为什么不能如愿。当使用小型测试程序(位于post的底部)时,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()和派生项与完整模式匹配,这意味着如果源数据没有逗号,并且格式有逗号,则可能会忽略它。

关于c - 读取.pgm图像文件的标题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18669255/

10-12 23:49