我试图从.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 :(得分:2)
首先,我建议你做一个小测试:例如,用0初始化你的变量,并验证它们在读操作后保持的值。
然后,尝试从格式字符串中删除,
个字符。检查它是否有效。
您看到的这种情况正在发生,因为fscanf()
和衍生产品在扫描时与完整模式匹配,这意味着如果您的源数据没有逗号且您的格式有逗号,则可能会被忽略。