我试图从.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/