我想阅读一个文本文件,其中图像像素值以这种方式存储
234
23
176
235
107
187
201
128
147
...
....
..
我试图以这种方式阅读此文本文件
#include<stdio.h>
#define M 2500
int main()
{
unsigned new_img[M];
unsigned char a;
FILE *input;
input=fopen("D:/trail.txt","r");
for(i=0;i<M;i++)
{
a=fgetc(input);
new_img[i]=(int)a;
input++;
}
....
....
...
return 0;
}
当我尝试打印它时显示一些随机值。 此外,我的所有像素值都在0到255的范围内。但在输出屏幕上,我得到的值大到1到100万
答案 0 :(得分:5)
根据fgetc()
的{{3}},我们可以看到
fgetc()从流中读取下一个字符并将其作为unsigned char转换为int,或者在文件末尾或错误时返回EOF。
它以字典方式读取逐个字符,而不是基于值。
相反,我建议
其他一些建议:
main()
的推荐签名为int main(void)
。fopen()
是否成功。fgetc()
返回int
。您应该在int
变量中收集返回值,理想情况下。 注意:您需要处理由\n
读取的尾随fgets()
并错误检查输入的有效性。
答案 1 :(得分:0)
您正在使用fgetc()
,这不是读取整数的正确方法,也是错误的。请注意,它的返回类型为int
,因为它可以返回常量EOF
。您将返回值截断为unsigned char
,这没有任何意义。
它读取字符,因此输入字符串为例如234
,您首先会看到字符2
,然后是3
,然后是4
,然后是换行符,依此类推。不是你想要的。
你应该使用:
int pixel;
if(fscanf(input, "%d", &pixel) == 1)
{
printf("read pixel %d\n", pixel);
}
这会转换十进制整数(可以包含许多单个字符),并将整数写入pixel
。如果失败,则不会返回1
。