[英]reading integers from text file in c
我想读取一个以这种方式存储图像像素值的文本文件
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万
根据fgetc()
的手册页 ,我们可以看到
fgetc()从流中读取下一个字符,并以无符号字符的形式将其返回给int,或者在文件或错误结束时返回EOF。
它以字典方式而不是根据value 逐字符读取字符 。
相反,我建议
其他一些建议:
main()
签名是int main(void)
。 fopen()
是否成功。 fgetc()
返回一个int
。 理想情况下,您应该将返回值收集在int
变量中。 注意:您需要注意fgets()
读取的尾随\\n
,并检查输入的有效性并进行错误检查。
您正在使用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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.