gpt4 book ai didi

c - 读取 .pgm 图像文件的标题

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:04 26 4
gpt4 key购买 nike

我正在尝试从 .pgm 图像文件 (mars.pgm) 的 header 读取大小值,并使用 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() 和衍生物在扫描时匹配完整模式,这意味着如果您的源数据没有逗号而您的格式有逗号,它可能会被忽略。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com